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

jQuery(elementArray)-仅选择数组项的子项,jquery,jquery-selectors,Jquery,Jquery Selectors,jQuery可以接受元素数组 jQuery( elementArray ) 我是否误解了elementArray参数的用法,或者这是一个jQuery错误 据推测,应用的任何选择器都将应用于数组中作为项或项的子项的所有htmlElement。但是,它似乎只选择数组项的子项 例如,在具有以下内容的数组中,它将不匹配具有topLevelDiv或topLevelSpan类的元素 elementArray[0] contains <div class="topLevelDiv">

jQuery可以接受元素数组

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

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

例如,在具有以下内容的数组中,它将不匹配具有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>
下面是一个演示:

jQuery正在按预期工作,当您查找上下文的第二个参数或提供上下文的第二个参数时,您将在指定的元素中查找所需的内容。如果要按elementArray中的顶部节点进行筛选,则需要使用
筛选
功能。

jQuery按预期工作,当您执行
查找
或为上下文提供第二个参数时,您将在指定的元素中查找所需内容。如果要按elementArray中的顶部节点进行筛选,则需要使用
筛选
功能。

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

因此,如果您这样做:

jQuery( elementArray ).css("color", "red");
它将在所有这些元素中使文本变为红色。jQuery操作将应用于这些特定元素。它不会直接应用于这些元素的任何子元素。它是否影响儿童取决于手术的内容。这与jQuery的设计一样

当您说“任何应用的选择器”时,您的意思并不清楚,因为在执行
jQuery(elementArray)
时,没有涉及选择器

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

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

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

因此,如果您这样做:

jQuery( elementArray ).css("color", "red");
它将在所有这些元素中使文本变为红色。jQuery操作将应用于这些特定元素。它不会直接应用于这些元素的任何子元素。它是否影响儿童取决于手术的内容。这与jQuery的设计一样

当您说“任何应用的选择器”时,您的意思并不清楚,因为在执行
jQuery(elementArray)
时,没有涉及选择器

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


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

:jsFiddle它的使用方式。@mblase75:lol的想法是一样的:)这看起来确实像是可能存在的问题通过阅读文档来回答。@AnthonyGrist:我相信文档已经阅读过了,并且发现很混乱(注意他们文章第一行的链接?)。我同意OP在这一点上的观点。@mellamokb
.find()
的文档对我来说似乎很清楚,不知道该函数的功能是什么导致了问题:jsFiddle它的使用方式。@mblase75:lol的想法是一样的:)这看起来确实像是一个可以通过阅读文档来回答的问题。@AnthonyGrist:我相信文档已经阅读过,并且发现很混乱(注意他们文章第一行的链接?)。我同意OP在这一点上的观点。@mellamokb
.find()
的文档对我来说似乎很清楚,不知道该函数的作用是什么导致了问题。从我在filter上读到的内容来看,它接受的是一个jQuery对象,而不是一个普通数组,例如[HtmleElement,HtmleElement…]。
$(elementArray)
是一个jQuery对象。如果调用
$(elementArray).filter('div')
而不是
$(elementArray).find('div')
您会发现它可以按预期工作。从我在filter上读到的内容来看,它接受的是jQuery对象,而不是普通数组,例如[htmlElement,htmlElement…])。
$(elementArray)
是jQuery对象。如果您调用
$(elementArray).filter('div')
,而不是
$(elementArray).find('div')
,您会发现它可以正常工作。谢谢。过滤和查找生成相反的匹配集<代码>$(elementArray).find('div')产生
[div.childDiv]
,和
$(elementArray.filter('div')
产生
[div.topLevelDiv]
。我一直在寻找更像XPath PathExpr
/
的东西,它选择“在任何级别”,将这两个集合结合起来。@Monte,我从来都不清楚您到底想做什么(现在仍然不想做),这就是为什么我描述了几个不同的选项,希望其中一个与您想做的事情相交。如果希望合并两个不同的选择,可以使用
.add()
方法将新元素添加到现有的jQuery对象中,或者合并两个jQuery对象,或者将新选择器操作的结果添加到