Неправильно использовать пользовательские атрибуты в 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, как уже упоминалось.Он скрывает все эти различия браузера.