我们可以用
获得所有domdocument.getElementsByTagName("*")
为什么我们不能使用
document.getElementsByClassName("*")
获取所有设置了class
属性的标记?
同样使用
document.getElementById("*")
获取设置了id
属性的标记?
虽然这些功能不是很必要,也可能没有需求,但我希望有人告诉我如何实现同样的功能。感谢。
答案 0 :(得分:8)
答案是因为getElementsByClassName()
和getElementById()
不会使用通配符。它们没有规范或编写,所以你不能那样使用它们。
进一步getElementById()
只返回一个DOM元素,而不是一个元素数组,因此它永远不会以这种方式工作。
如果你想获得所有带有类名的元素或所有带有id的元素,你可以这样做:
function getAllElementsWithAttribute(attr) {
var results = [];
var all = document.getElementsByTagName("*");
for (var i = 0, len = all.length; i < len; i++) {
if (all[i][attr]) {
results.push(all[i]);
}
}
return(results);
}
然后,您可以使用以下内容获取具有类名的所有元素:
var items = getAllElementsWithAttribute("className");
或者,获取带有ID的所有元素:
var items = getAllElementsWithAttribute("id");
答案 1 :(得分:0)
正如@ jfriend00在answer before中建议的那样,javascript的浏览器实现中本机不存在该功能。同样,答案还包含使用纯JavaScript进行此操作的方法。
或者,您必须使用基于javascript的框架,并为您提供更好的选择器。
因此,考虑到一个这样的框架jQuery,您可以:
选择class
的所有元素:
$('[class]')
选择id
的所有元素:
$('[id]')
答案 2 :(得分:0)
getElementsByClassName()
未在所有浏览器上实施,最明显的是Internet Explorer。但是,您可以使用各种JavaScript库(例如jQuery)以跨浏览器方式实现此功能。默认函数都没有使用通配符*
来获取所有值。虽然你可以使用jquery这样做$('[id]')
,如SO帖子所示:jquery get only all html elements with ids
答案 3 :(得分:-1)
这是getElementByClass的快速链接 - http://www.actiononline.biz/web/code/how-to-getelementsbyclass-in-javascript-the-code/ - 您可以修改代码,通过将if语句修改为
来返回非空类的所有元素if (allHTMLTags[i].className!="") {
要获取具有id的所有元素,只需获取所有元素并丢弃那些没有id的元素。