Il n'est pas bon d'utiliser des attributs personnalisés dans le code HTML. Le cas échéant, vous devez utiliser HTML5's data
attributes.
Néanmoins, vous pouvez écrire votre propre fonction qui traverse l'arbre, mais ce sera assez lent par rapport à getElementById
parce que vous ne pouvez pas utiliser un indice:
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;
}
Dans le pire des cas, cela traverser l'arbre entier. Réfléchissez à la façon de modifier votre concept afin de pouvoir utiliser autant que possible les fonctions du navigateur.
Dans les navigateurs les plus récents que vous utilisez la méthode querySelector
, où il serait juste:
var element = document.querySelector('[tokenid="14"]');
Ce sera beaucoup plus rapide aussi.
Mise à jour: S'il vous plaît noter le commentaire de @Andy E ci-dessous. Il se peut que vous rencontriez des problèmes avec IE (comme toujours;)). Si vous faites beaucoup de récupération d'éléments de ce type, vous devriez vraiment envisager d'utiliser une bibliothèque JavaScript comme jQuery, comme les autres mentionnés. Il cache toutes ces différences de navigateur.
+1 pour le dur travail, mais gardez à l'esprit que 'children' a un
@Andy: Euh, je ne connaissais pas ces problèmes ... merci! Je vais le laisser comme un exercice pour le lecteur si;) –
Je ne vous blâme pas :-) –