Jquery 如果不包含文本,则隐藏div

Jquery 如果不包含文本,则隐藏div,jquery,Jquery,如果PageHeaderDescription不包含任何文本内容,则我想将其隐藏。使用jquery可以吗 <div class="PageHeaderDescription"> <h1>Accessories</h1> <img border="0" src="" style="cursor: pointer; display: none;" id="EntityPic621"> </div> 配件 这就是div与文本的关

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

配件
这是附件页面,你可以找到产品的资料!
​jQuery(文档).ready(函数(){ //警报(jQuery('.PageHeaderDescription').text()); var headerText=jQuery('.PageHeaderDescription h1').text(); //警报(headerText); if(jQuery.trim(jQuery('.PageHeaderDescription').text())==HeaderText){ jQuery('.PageHeaderDescription').hide(); } });​ 或

或者

您可以使用:is进行检查

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

首先为您的Div分配一个id=

<div class="PageHeaderDescription" id="PageHeaderDescription">
试试这个

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

这一点很难理解,因为我必须在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();
    }
});
$('div.PageHeaderDescription')。每个(函数(即){
var-txt='';
for(var c=0;c
再一次,老套但有效。您必须记住,即使在DOM中也考虑了空格,因此仅通过“没有节点类型===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();
(函数($){
$.expr[':'].notext=函数(对象、索引、元、堆栈){
var-txt='';
for(var c=0;c
当然,这对我来说很有用:

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

您将需要另一个函数来仅获取div中不在某些标记中的文本。当您直接在
PageHeaderDescription
中使用.text()时,也会得到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()
    }
  }
);
附:帮助您在.hide()和.remove()之间进行选择

--


--

您可能应该将文本包装在
或其他东西中,然后可以使用
$('theSpanSelector')检查它。它是(':empty')我不能包装文本,因为它是由客户在180种产品的CMS中完成的。180个不同的网站太麻烦了。我相信
.text()
仍然会抓住
文本,不是吗?我猜你的意思是
$(“.PageHeaderDescription”)
。当我的页面显示产品时会发生什么?对于180多页x 180个站点,这是不可管理的。@Super1修改了我的答案来处理这个问题,只是将H1中的内容与整个文本进行比较,以确定div中没有其他文本。
:empty
仅在没有子元素时才为真。在OP的情况下,子元素是不相关的,重要的只是文本(因此
:empty
很可能不起作用),再次强调,
:empty在这种情况下不起作用,因为它决定于子元素而不仅仅是文本。
if( $('div.PageHeaderDescription').is(':empty') ) {
    // Your code
}
$('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();
    }
});
(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();
var clone = ​$(".PageHeaderDescription").clone(true);​​​​​​​​​
clone.find('*').remove();
if (clone.text().trim() == '') $(".PageHeaderDescription").hide();
clone.remove();
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()
    }
  }
);