Javascript 如何迭代包含所提供属性之一的HTML DOM节点?

Javascript 如何迭代包含所提供属性之一的HTML DOM节点?,javascript,css,dom,css-selectors,Javascript,Css,Dom,Css Selectors,我希望能够为以下CSS选择器获取第一个匹配元素,然后是第二个,依此类推: [att] 以下选择器不是有效的CSS3选择器,但这正是我试图实现的目标: [att][0] [att][1] ... [att][n] 我可以像上面的例子一样,组合多个选择器并迭代每个匹配节点吗 [att1],[att2] 如果无法使用本机DOM或CSS3选择器完成此操作,则XPath查询也是一个选项 使用jQuery: $('[att]'); 此外,这项工作: $('[att1],[at

我希望能够为以下CSS选择器获取第一个匹配元素,然后是第二个,依此类推:

[att]
以下选择器不是有效的CSS3选择器,但这正是我试图实现的目标:

   [att][0]
   [att][1]
   ...
   [att][n]
我可以像上面的例子一样,组合多个选择器并迭代每个匹配节点吗

[att1],[att2]
如果无法使用本机DOM或CSS3选择器完成此操作,则XPath查询也是一个选项

使用jQuery:

$('[att]');
此外,这项工作:

$('[att1],[att2]');
第一个将为您提供具有att属性的所有元素的列表。如果您不想使用jQuery,代码的运行速度会慢得多,因为这样做的逻辑方式是:

var elems = document.getElementsByTagName('*');
for(var i=0, l=elems.length; i<l; i++){
    if(elems[i].getAttribute('att')){
        // do stuff
    }
}
jQuery实际上更快的原因是,它将尽可能使用XPath查询或其他方法,这将大大加快执行速度。当然,如果需要,您可以在上面的代码中实现XPath。

如果document.queryselectoral是一个选项,这将非常简单-只需传递选择器,浏览器将处理其余部分:

var elms = document.querySelectorAll('[att]');

for (var i = 0; i < elms.length; ++i) {
    alert(elms[i].tagName);
}

我不明白你的[att1,att2]选择器。您不想迭代只匹配一个属性选择器的元素吗?对于初学者,我只想迭代匹配一个属性的节点。Ex[href][0],[href][1]。若要组合多个属性选择器,请对具有一个或两个属性选择器的元素使用[att1],[att2],或对必须同时具有两个属性选择器的元素使用[att1][att2]。确定。那么如何得到与该选择器匹配的第n个元素呢?没有CSS选择器,所以需要使用DOM函数来实现这一点。使用jQuery是一件很简单的事情,但我想你知道怎么做,并且想要一个我无法提供的本地DOM解决方案。谢谢,但是不能使用jQuery。仅限本机CSS3、DOM或XPath查询。但是,我应该尝试看看jQuery如何使用XPath进行查询。谢谢。您需要将.get调用链接到jQuery调用以获得一组DOM元素。好奇-为什么不能使用jQuery?如果需要4kb的缩小和gzip编辑,您可以将其剥离到Sizzle引擎,该工具可以通过浏览器扫描基于javascript的web应用程序,查找特定的DOM节点。因此必须通过标准DOM/JS/CSS3工作!document.querySelectorAll'[href],[onclick]'[10];请注意,IE7或FF3不支持这一点,而且CSS2中引入了属性选择器。
var elms = document.querySelectorAll('[att1], [att2]');