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

时间:2014-02-04 00:02:29

标签: javascript html web console

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

请注意:我想点击的元素是按钮;他们都属于班级“跟随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();
        }
    }
}

1 个答案:

答案 0 :(得分:4)

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

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

1) document.querySelectorAll("follow js-follow btn btn-primary")正在寻找这种标记名称的层次结构,如下所示:

<follow>
    <js-follow>
        <btn>
            <btn-primary>

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

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

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

我怀疑问题#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();
    }
}