jQuery(elementArray) - 仅选择数组项的子项

时间:2012-03-27 21:49:58

标签: jquery jquery-selectors

jQuery的constructor可以接受一系列元素。

jQuery( elementArray )

我是否误解了elementArray参数的用法,或者这是一个jQuery错误?

据推测,任何应用的选择器都将应用于所有 HTMLElements,它们是数组中的项目或子项。但是,它似乎只选择数组项的

例如,在具有以下内容的数组中,它将与topLevelDiv或topLevelSpan类的元素不匹配。

elementArray[0] contains
    <div class="topLevelDiv">
        <span class="childSpan"></span><div class="childDiv"></div>
    </div>
elementArray[1] contains
    <span class="topLevelSpan">
        <span class="childSpan"></span>
    </span>

无论elementArray是用作上下文还是用作包装和调用find()

的对象,都是如此
$('div', elementArray)
// OR
$(elementArray).find('div')

这是一个演示: http://jsfiddle.net/A49VV/1/

2 个答案:

答案 0 :(得分:1)

jQuery按预期工作,当您执行find或为上下文提供第二个参数时,您正在 中查找为您想要的内容指定的元素。如果您想通过elementArray中的顶级节点进行过滤,则需要使用filter函数。

答案 1 :(得分:0)

jQuery( elementArray )创建一个jQuery对象,其中包含数组中的所有元素。您应用于该jQuery对象的任何操作都将应用于数组中的所有元素。

所以,如果你这样做:

jQuery( elementArray ).css("color", "red");

它将在所有这些元素中将文本变为红色。 jQuery操作将应用于这些特定元素。它不会直接应用于这些元素的任何子元素。它是否影响孩子取决于手术的内容。这就像jQuery的设计一样。

当说&#34;任何应用的选择器&#34;时,不清楚你的意思。因为当您执行jQuery( elementArray )时没有涉及选择器。

您可以使用jQuery( elementArray )过滤jQuery( elementArray ).filter(selector),然后将从jQuery对象中删除数组中与选择器不匹配的元素。

或者,您可以在.find()中使用jQuery( elementArray ).find(selector)。这将查看elementArray中每个元素的后代,以查找与选择器匹配的后代,并将它找到的所有后代放入返回的新jQuery对象中。