【问题标题】:Find whether jQuery object is included inside another jQuery object查找 jQuery 对象是否包含在另一个 jQuery 对象中
【发布时间】:2015-12-27 09:34:59
【问题描述】:

假设我有一些运行如下的 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。但是,我不想在 #myId 的父级上运行 myFunction() 两次。

所以 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 只需要对每个&lt;div&gt; 调用一次函数。

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

【问题讨论】:

  • 你能添加一些简单的 HTML 来说明你不想被选中的元素吗?
  • 我认为您的变量命名错误。 onetwo 不应该是 myVar1myVar2 吗?
  • 我修正了变量名。对此感到抱歉。

标签: javascript jquery javascript-objects


【解决方案1】:

引用你的话,

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

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

来自index()

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

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

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

希望有帮助!

【讨论】:

    【解决方案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类时被选中。

    【讨论】:

    • 根据文档,您可以将 jQuery 对象传递给不是这样的:var two = $('#myId').not(one).parent();
    • @JasonSperske 谢谢,我不知道,它进一步简化了代码!
    • 我认为最终的代码可能需要更多的调整,现在我看到了示例 html,只是想想出一个 jsfiddle 来演示这一点,但我有点碰壁
    • @JasonSperske 你是对的,示例 HTML 与之前发布的解释有些矛盾。
    猜你喜欢
    • 2018-06-12
    • 1970-01-01
    • 2020-11-29
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-24
    • 2022-11-09
    相关资源
    最近更新 更多