jquery过滤图像src问题

时间:2012-07-19 13:56:38

标签: javascript jquery

如果图像包含NO src,那么我想隐藏div.PageHeaderDescription

<div class="PageHeaderDescription">
  <h1>Bistro 300</h1>
    <img border="0" src="images/Category/large/469.jpg" id="EntityPic621">
    This is some text
</div>

为此,我使用了:

if ($("div.PageHeaderDescription img").filter("[src='']")) {
    $("div.PageHeaderDescription").hide();
}

但是如果你将src路径放入图像中,jquery仍会隐藏div.PageHeaderDescription,这是错误的。如果有图像src,它需要是可见的。

以下是我的示例:http://jsfiddle.net/dfasd/1/

5 个答案:

答案 0 :(得分:4)

$("div.PageHeaderDescription img[src='']").parent().hide();

使用空img查找src并隐藏其父div.PageHeaderDescription;

<强> DEMO

OR

$("div.PageHeaderDescription").has("img[src='']").hide();

隐藏div.PageHeaderDescription,其中img为空src

<强> DEMO

答案 1 :(得分:3)

filter()返回一个jQuery对象,无论元素是否匹配,它始终是真实的。

您应该做的是检查返回对象的length属性;

if ($("div.PageHeaderDescription img").filter("[src='']").length) {
    $("div.PageHeaderDescription").hide();
}

虽然你可以将其缩短为;

if ($("div.PageHeaderDescription img[src='']").length) {
    $("div.PageHeaderDescription").hide();
}

但如果您在页面上有多个div.PageHeaderDescription,那么您应该这样做;

$("div.PageHeaderDescription").each(function () {
    var self = $(this);

    if (self.find('img[src=""]').length) {
        self.hide();
    }
});

答案 2 :(得分:2)

如果您想在页面加载时执行此操作,可以使用以下代码:

$("div.PageHeaderDescription img")     // search for all img's inside a div...
   .filter("[src='']")                 // get only ones with no src
   .parents("div.PageHeaderDescription")   // get their parent elements
   .hide(); // hide then

或者,每次要检查是否有任何没有src的img在页面中并且必须隐藏时,您可以运行相同的脚本。

答案 3 :(得分:1)

不需要使其比使用.filter()更复杂。

var phd = $("div.PageHeaderDescription");    
if ($('img:not([src])',phd).length || $('img[src=""]',phd).length) {
    phd.hide();
}

我检查img是否没有src属性,或者它是否具有属性我检查它是否为空。

小提琴:http://jsfiddle.net/iambriansreed/G6bPu/

答案 4 :(得分:0)

如前所述,jQuery对象始终计算为true。但是您根本不需要if语句,只需将元素集减少为具有“空”图像的元素即可。这就是.filter()的用途:

$("div.PageHeaderDescription").filter(function() {
    return $(this).find("img[src='']").length > 0;
}).hide();