jQuery .closest()在自定义jQuery插件中返回多个结果

时间:2012-06-14 09:23:35

标签: jquery closest

在攻击我的空闲时间项目时,我偶然发现了一个令人费解的jQuery行为。

我有一个自定义验证插件编写和工作。在插件中,我想使用.closest()方法实现一些功能。奇怪的是,这个方法返回了多个元素。

以下是示例代码:

this.closest(".control-group")
$(this).closest(".control-group");

以上代码行都选择了“control-group”类的所有四个元素。这个代码放在我的插件中:

var element_ID = this.attr("id");
$("#" + element_ID).closest(".control-group")

Above选择正确且只有一个带有“control-group”类的元素。

我无法使用此“hack”,因为并非我要验证的所有元素都设置了“id”属性,因此它不会在所有情况下都有效。

使用jQuery 1.7.2(似乎是最新的稳定版)。任何想法为什么会这样?

2 个答案:

答案 0 :(得分:6)

this是一个包含至少4个DOM元素的jQuery对象,在其上调用.closest将为所有这些元素检索最接近的.control-group元素。

this.attr("id")将检索jQuery对象中第一个dom元素的id,因此您可以刚刚完成$(this[0]).closest...

答案 1 :(得分:2)

您可能没有所有元素的ID,但您确实拥有this

而不是

var element_ID = this.attr("id");
$("#" + element_ID).closest(".control-group")

尝试

$(this).closest(".control-group")

<强>更新

jQuery网站说:

  

给定一个表示一组DOM元素的jQuery对象,   .closest()方法搜索这些元素及其祖先   在DOM树中,从匹配中构造一个新的jQuery对象   元素。 .parents()和.closest()方法类似   他们都遍历DOM树。两者之间的差异,   虽然微妙,但意义重大:

     

nearest():返回的jQuery对象包含零个或一个元素

     

parents():返回的jQuery对象包含零,一或   多元素

这是链接:http://api.jquery.com/closest/

所以你原来的问题可能没有回答