在 HTML 中使用自定义属性是不好的。如果有的话,你应该使用HTML5 的data
属性。
尽管如此,您可以编写自己的遍历树的函数,但这与您无法使用任何索引相比会很慢getElementById
:
function getElementByAttribute(attr, value, root) {
root = root || document.body;
if(root.hasAttribute(attr) && root.getAttribute(attr) == value) {
return root;
}
var children = root.children,
element;
for(var i = children.length; i--; ) {
element = getElementByAttribute(attr, value, children[i]);
if(element) {
return element;
}
}
return null;
}
在最坏的情况下,这将遍历整棵树。想想如何改变你的概念,这样你就可以尽可能多地使用浏览器功能。
在较新的浏览器中,您使用该querySelector
方法,它只是:
var element = document.querySelector('[tokenid="14"]');
这也会快得多。
更新:请注意下面@Andy E 的评论。可能是您遇到了 IE 的问题(一如既往;))。如果您进行大量此类元素检索,您真的应该考虑使用 JavaScript 库,例如 jQuery,正如其他人提到的那样。它隐藏了所有这些浏览器差异。