我有一个 XHTML 页面,其中每个 HTML 元素都有一个唯一的自定义属性,如下所示:
<div class="logo" tokenid="14"></div>
我需要一种通过 ID 查找此元素的方法,类似于document.getElementById(),但我想使用自定义"tokenid"属性搜索该元素,而不是使用通用 ID 。像这样的东西:
document.getElementByTokenId('14');
那可能吗?如果是 - 任何提示将不胜感激。
谢谢。
我有一个 XHTML 页面,其中每个 HTML 元素都有一个唯一的自定义属性,如下所示:
<div class="logo" tokenid="14"></div>
我需要一种通过 ID 查找此元素的方法,类似于document.getElementById(),但我想使用自定义"tokenid"属性搜索该元素,而不是使用通用 ID 。像这样的东西:
document.getElementByTokenId('14');
那可能吗?如果是 - 任何提示将不胜感激。
谢谢。
在 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,正如其他人提到的那样。它隐藏了所有这些浏览器差异。
<div data-automation="something">
</div>
document.querySelector("div[data-automation]")
=> 找到 div
document.querySelector("div[data-automation='something']")
=> 找到具有值的 div
如果你使用 jQuery,你可以使用他们的一些选择器魔法来做这样的事情:
$('div[tokenid=14]')
作为您的选择器。
如果您愿意使用JQuery,那么:
var myElement = $('div[tokenid="14"]').get();