隐藏div,如果它不包含文本

时间:2012-07-19 12:48:57

标签: jquery

如果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>

8 个答案:

答案 0 :(得分: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();
    }
});

再次,hacky但有效。你必须要记住,即使在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();

当然是working demo

答案 1 :(得分:1)

$("PageHeaderDescription").each(function(i, val) {
    if ($(this).text().trim() === "") {
        $(this).hide();
    }
});

答案 2 :(得分:1)

​jQuery(document).ready(function(){

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

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

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


});​

答案 3 :(得分:1)

试试这个......

if( $('div.PageHeaderDescription').is(':empty') ) {
    // Your code
}

答案 4 :(得分:1)

您将需要另一个函数来仅获取div中不在某些标记内的文本。当你在PageHeaderDescription中直接使用.text()时,你也会获得h1的内部文本。有关.justText()的更多信息,您可以看到HERE!

答案是:

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()'s Reference

- .remove()'s Reference

答案 5 :(得分:0)

 $("#empty").click(function() {
      alert($('#myDiv').is(':empty'));
    });

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

您可以使用:用于检查

if( $('#leftmenu').is(':empty') ) {
}

答案 6 :(得分:0)

首先为你分配一个id = Div。

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

然后

$("#PageHeaderDescription").each(function(i, val) {
    if ($(this).text().trim() === "") {
        $(this).hide();
    }
});

答案 7 :(得分:0)

这对我有用:

var clone = ​$(".PageHeaderDescription").clone(true);​​​​​​​​​
clone.find('*').remove();
if (clone.text().trim() == '') $(".PageHeaderDescription").hide();
clone.remove();