2015-09-13 122 views
-1

我需要通过querySelectorAll函数获取元素的帮助。 当我打电话给它时,我传递一个字符串作为这个函数的参数,多个元素之间用逗号分隔,它将带有节点return me NodeList,但它们排序为first-depth traversal pre-order(应该像它们位于document body中那样)。当我想调用method返回保存在Array中的document中更多元素的值时,我遇到问题。所以我把这个JavaScript querySelectorAll元素顺序

$('#textinput, #someotherinput').value(); 

其中具有id #someotherinput元件定位元素#textinput以上,但querySelectorAll后的结果是这样的:

[input#someotherinput, input#textinput] 
    0: input#someotherinput 
    1: input#textinput 
    length: 2 
    __proto__: NodeList 

,我需要对它们进行排序方式,我没有当我叫$() ,因为当我需要使用值时,我只看到$('#textinput, #someotherinput'),并且在document body中找到元素的顺序并且使用带有这些元素的值的返回数组时,我不知道第一个(第0个)元素中保存的是什么,阵列中的位置。是的,我知道querySelectorAlltraversal pre-order函数。那么,如何对我的订单进行排序(尽可能简单)?

+0

如果一个选择器找到多个元素,或者多个选择器找到一个元素,该怎么办?那些如何排序? – Guffa

+0

如果多个选择器找到一个元素,则顺序无关紧要。我认为这将按排序的属性排序。因此''input type =“text”id =“idselector”class =“classSelector”/>'我调用'$('。classSelector,#idselector')'querySelectorAll'的结果是nodeList,其中包含'input#idselector '在第0个位置 – Peter

+0

节点按文档顺序返回。该算法是下降文档树,根据选择器测试每个节点。如果节点匹配其中的任何节点,则将其添加到列表中。选择器实际上是“*选择具有textinput或其他输入ID的元素”,因此选择器的顺序不会影响返回节点的顺序。哦,并且一个NodeList不是一个数组。 – RobG

回答

0

有没有简单的方法来确定一个元素是否会被选择器匹配。你将不得不重新实现整个规则匹配系统,所以最简单的方法就是简单地使用选择器来查询元素。

按照您喜欢的顺序获取元素的最简单方法是将选择器拆分为子查询器,对每个子查询器进行查询,然后通过消除重复的元素引用将结果放在一起。