有没有一种方法可以使用`in`运算符来排除某些元素?

时间:2020-02-14 16:56:03

标签: javascript jquery

我想知道是否可以使用以下方法找出页面上的<p><header>标签内是否有<footer>标签:

$("p").each(function() {
  if (!($(this) in $("footer") || $(this) in $("header")) {
    // logic
  }
});

我的目标是选择<p><header>

不是<footer>标签

1 个答案:

答案 0 :(得分:4)

首先,不要使用in来枚举jQuery对象。对象中还有其他会干扰的属性和方法。

如果要查找不在给定容器中的p元素,则可以使用filter()

var $p = $('p').filter(function() {
  return $(this).closest('header, footer').length === 0;
});

但是,在可能的情况下,一种更简单的方法是构造HTML,以便将要定位的所有p元素都放在一个公共容器中。然后,您的代码将变得更加简单明了,例如:

<header>
   <p>Header p</p>
</header>
<main>
   <p>Main p</p>
</main>
<footer>
   <p>Footer p</p>
</footer>
var $p = $('main p');