在HTML中使用自定义属性并不好。如果有的话,你应该使用HTML5's data
attributes。
不过你可以编写自己的函数,遍历树,但是这将是相当缓慢相比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的评论。这可能是你碰到IE的问题(一如既往))。如果你做了很多这种元素检索,你应该考虑使用像jQuery这样的JavaScript库,就像其他人提到的一样。它隐藏了所有这些浏览器差异。
+1的辛勤工作,但请记住,'children'具有
2011-06-07 16:05:37
@安迪:呃,我不知道这些问题......谢谢!我会把它作为练习给读者尽管;) – 2011-06-07 16:08:16
我不怪你:-) – 2011-06-07 16:09:16