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()
}
}
);