查找jQuery对象是否包含在另一个jQuery对象中

时间:2015-09-29 19:03:26

标签: javascript jquery javascript-objects

所以,让我说我有一些运行如下的jQuery:

var myVar1 = $('.myClass1, .myClass2');
myFunction(myVar1); // Does something to element myVar1

var myVar2 = $('#myId').parent();
myFunction(myVar2); // Does something to element myVar2

这就是问题所在。有时#myId的父级将是其自己的元素,但有时也会有.myClass1.myClass2类。但是,我不想在myFunction()的父母两次运行#myId

所以html可以像:

<div class="myClass1"></div>
<div class="myClass1"></div>
<div class="myClass2"></div>
<div>    
    <div id="myId"></div>
</div>

或者它可能是这样的:

<div class="myClass1">
    <div id="myId"></div>
</div>
<div class="myClass1"></div>
<div class="myClass2"></div>

jQuery只需要在每个<div>上调用一次函数。

如何检测myVar2中是否包含myVar1

2 个答案:

答案 0 :(得分:2)

您可以使用jQuery not selector执行此操作,这会从集合中删除匹配的元素。要修改您的示例:

var one = $('.myClass1, .myClass2');
myFunction(one); // Does something to element myVar1

var two = $('#myId').not(one).parent();
myFunction(two); // Does something to element myVar2

对第二个选择的修改将使#myId仅在元素附加.myClass1.myClass2类时才会被选中

答案 1 :(得分:2)

引用你,

  

如何检测myVar1中是否包含myVar2?

每个变量都返回一个jQuery对象,这很棒,当然。如果你想知道一个jQuery对象是否在其返回的集合中包含另一个jQuery对象,你可以use jQuery's index() method.

来自index()

  

如果在元素集合上调用.index()并传入DOM元素或jQuery对象,.index()将返回一个整数,指示传递的元素相对于原​​始集合的位置。

所以我们知道我们可以合理地得到一个等于或大于零的数字,代表另一个jQuery对象的索引,如果它存在于myVar1内,否则我们得到-1如果它不存在。

如果var myVar2 = $('#myId').parent();中包含var myVar1 = $('.myClass1, .myClass2'),则运行myVar1.index(myVar2)将返回大于或等于零的数字。否则-1。

希望有所帮助!