jQuery.has()总是如此

时间:2014-07-08 20:24:14

标签: javascript jquery

我在一个页面上有这个HTML:

<div class="category-products">
    <div class="rugs-cat"></div>
    ....
</div>

这是另一个:

<div class="category-products">
    <div class="toolbar-top"></div>
    .....
</div>

如果.category-products.rugs-cat作为后代,我正在尝试添加样式,如果没有,则将其删除。我试过这个(在dom上准备好了):

if(jQuery(".category-products").has(".rugs-cat")) {
    jQuery(".category-products").css("margin-left", "150px")
} 
else {
    jQuery(".category-products").css("margin-left", "0");
}

但每次都会添加保证金。我确定第二页的任何地方都没有.rugs-cat课程。

3 个答案:

答案 0 :(得分:8)

has()将始终返回一个对象(一个集合)。该集合有时会为空,这是您想要测试的内容:

if (jQuery(".category-products").has(".rugs-cat").length > 0) 
{
  jQuery(".category-products").css("margin-left", "150px")
} 
else 
{
  jQuery(".category-products").css("margin-left", "0") ; 
}

答案 1 :(得分:0)

如果$el.has(pattern)的后代与el匹配,则假设pattern返回true。实际上,它返回具有这种元素的元素集。如果没有,则返回[](空集),这是真实的。相反,请使用此

(jQuery(".category-products").has(".rugs-cat").length)

此评估为true,因为[]的{​​{1}}为0;

答案 2 :(得分:0)

Official documentationhas()方法检索已找到元素的数组不是布尔。你需要

if (jQuery(".category-products").has(".rugs-cat").length > 0)

而不是

if (jQuery(".category-products").has(".rugs-cat"))

请参阅jsfiddle example