2

PageHeaderDescriptionテキストコンテンツが含まれていない場合は、非表示にします。jqueryで可能ですか?

<div class="PageHeaderDescription">
  <h1>Accessories</h1>
  <img border="0" src="" style="cursor: pointer; display: none;" id="EntityPic621">
</div>

これは、div がテキストでどのように見えるかです:

<div class="PageHeaderDescription">
  <h1>Accessories</h1>
  <img border="0" src="" style="cursor: pointer; display: none;" id="EntityPic621">
  This is the Accessories page, you can find stuff for the products!
</div>
4

8 に答える 8

2

これは、私が望むよりもDOMを少し深くしなければならないため、ハッキーになりますが、あなたが望んでいることには機能します。

$('div.PageHeaderDescription').each(function(i,e){
    var txt = '';
    for (var c = 0; c < e.childNodes.length; c++){
        if (e.childNodes[c].nodeType===3){
            txt += e.childNodes[c].data;
        }
    }
    if (txt.trim().length===0){
        $(e).hide();
    }
});

繰り返しますが、ハッキーですが効果的です。DOMでは空白も考慮されるため、「nodeType===3要素がない」でチェック/フィルタリングするだけでは不十分であることに注意する必要があります。代わりに、すべてのテキストを連結してからトリミングして空白を削除し、長さを取得します。


カスタムセレクターによるフォローアップ:

(function($){
    $.expr[':'].notext = function(obj, index, meta, stack){
        var txt = '';
        for (var c = 0; c < obj.childNodes.length; c++){
            if (obj.childNodes[c].nodeType===3){
                txt += obj.childNodes[c].data;
            }
        }
        return (txt.trim().length===0);
    };
})(jQuery);

$('div.PageHeaderDescription:notext').hide();

そしてもちろん、作業デモ

于 2012-07-19T13:13:55.287 に答える
1

一部のタグ内にない div 内のテキストのみを取得するには、別の関数が必要になります。.text() を直接使用するPageHeaderDescriptionと、h1 の内部テキストも取得されます。あなたの詳細については、こちら.justText()をご覧ください。

答えは次のとおりです。

jQuery.fn.justText = function() {
  return $(this).clone().children().remove().end().text();
};

$('document').ready(function(){
    if ($('.PageHeaderDescription').justText().trim().length == 0) {
      $('.PageHeaderDescription').remove(); // If you want to hide, use .hide()
    }
  }
);

PS .: .hide() と .remove() のどちらかを選択しやすくするため

-- .hide() のリファレンス

-- .remove() のリファレンス

于 2012-07-19T13:40:09.633 に答える
1
$("PageHeaderDescription").each(function(i, val) {
    if ($(this).text().trim() === "") {
        $(this).hide();
    }
});
于 2012-07-19T12:52:10.453 に答える
1
jQuery(ドキュメント).ready(関数(){

   // alert(jQuery('.PageHeaderDescription').text());

    var headerTxt = jQuery('.PageHeaderDescription h1').text();
    //alert(headerTxt);    

        if(jQuery.trim(jQuery('.PageHeaderDescription').text())==headerTxt){
        jQuery('.PageHeaderDescription').hide();
    }


});
于 2012-07-19T12:53:59.500 に答える
0

これは私にとってはうまくいきます:

var clone = ​$(".PageHeaderDescription").clone(true);​​​​​​​​​
clone.find('*').remove();
if (clone.text().trim() == '') $(".PageHeaderDescription").hide();
clone.remove();
于 2012-07-19T13:21:12.090 に答える
0
 $("#empty").click(function() {
      alert($('#myDiv').is(':empty'));
    });

また

$("div:empty").hide();

また'

:is をチェックに使用できます

if( $('#leftmenu').is(':empty') ) {
}
于 2012-07-19T12:54:02.340 に答える
0

最初に id= を Div に割り当てます。

<div class="PageHeaderDescription" id="PageHeaderDescription">

それで

$("#PageHeaderDescription").each(function(i, val) {
    if ($(this).text().trim() === "") {
        $(this).hide();
    }
});
于 2012-07-19T12:54:59.360 に答える