所以,让我说我有一些运行如下的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
?
答案 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。
希望有所帮助!