在 JavaScript 中单击特定类的所有元素?

use*_*641 2 html javascript console web

我是 JavaScript 的新手。我正在尝试创建一个脚本,该脚本将单击属于特定类的所有元素。我的代码似乎不起作用;我已经通过几个不同的调试程序运行它,但没有返回任何结果。通过控制台运行它后,它返回的只是“未定义”。我能做什么?

注意:我想点击的元素是按钮;它们都属于“follow js-follow btn btn-primary”类;如果数据值“data-following”等于“0”,我只想单击它们。

谢谢!

var numRepeat = document.querySelectorAll("follow js-follow btn btn-primary").length;
for (var i = 0; i < numRepeat; ++i) {
    var currentFocus = document.getElementsByClassName("follow js-follow btn btn-primary")[i];
    if (currentFocus !== null) {
        var followBinary = currentFocus.getAttribute("data-following");
        if (followBinary === "0") {
            currentFocus.click();
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

jfr*_*d00 7

首先,你真的不清楚你想要完成什么。如果您可以包含一些 HTML 并用文字解释您实际要做什么,我们可以让您更好地了解如何最好地解决问题。

然后,我看到了几个潜在的问题(试图猜测你真正想要做什么):

1) document.querySelectorAll("follow js-follow btn btn-primary")正在寻找这样的标签名称层次结构:

<follow>
    <js-follow>
        <btn>
            <btn-primary>
Run Code Online (Sandbox Code Playgroud)

这真的是你要找的,还是你的意思是类名?如果是类名,那么您需要.在名称前加一个,或者如果您要查找具有任何这些类名的对象,则在它们前面放一个句点并在它们之间放逗号。

2)运行完全相同的getElementsByClassName()查询 numRepeat 次数是没有意义的。只需运行一次并迭代结果。

3)与其调用click()方法,通常最好只为该 DOM 对象执行您想要的代码并将其传递给所需的 DOM 对象。如果需要,您可以对单击处理程序使用相同的函数并直接调用。

我怀疑问题 #1 可能是您的主要问题,因为它可能会以您现在的方式找到零结果。


如果我假设您真正想要的选择器是基于查找具有这些类名中的任何一个的任何对象,那么您可以使用:

var items = document.querySelectorAll(".follow, .js-follow, .btn, .btn-primary");
for (var i = 0; i < items.length; i++) {
    if (items[i].getAttribute("data-following") === "0") {
        items[i].click();
    }
}
Run Code Online (Sandbox Code Playgroud)