在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