jQuery.has()总是为真

jQuery.has() is always true

本文关键字:has jQuery      更新时间:2023-09-26

我有这个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 ready上执行):

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

但是每次都加边距。我敢肯定在第二页的任何地方都没有.rugs-cat

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

如果el有与pattern匹配的后代,则假设$el.has(pattern)返回true。实际上,它返回包含这样一个元素的元素集合。如果没有,则返回[](空集合),为真值。相反,使用

(jQuery(".category-products").has(".rugs-cat").length)
[]length为0时,

官方文档说has()方法检索数组找到的元素,不是布尔值。你需要

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

代替

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

参见jsfiddle example