为什么不(如何)document.getElementsByClassName("*")?

flo*_*ong -2 javascript dom

我们可以得到所有的dom

document.getElementsByTagName("*")
Run Code Online (Sandbox Code Playgroud)

为什么我们不能使用

document.getElementsByClassName("*")
Run Code Online (Sandbox Code Playgroud)

获取具有class属性集的所有标记?

同样使用

document.getElementById("*")
Run Code Online (Sandbox Code Playgroud)

获取id属性集的标签?

虽然这些功能不是很必要,也可能没有要求,但我希望有人告诉我如何实现同样的功能.谢谢.

jfr*_*d00 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);
}
Run Code Online (Sandbox Code Playgroud)

然后,您可以使用以下命令获取具有类名的所有元素:

var items = getAllElementsWithAttribute("className");
Run Code Online (Sandbox Code Playgroud)

或者,使用以下内容获取带有ID的所有元素:

var items = getAllElementsWithAttribute("id");
Run Code Online (Sandbox Code Playgroud)