【问题标题】:Clicking all elements of a specific class in JavaScript?单击 JavaScript 中特定类的所有元素?
【发布时间】:2014-02-27 17:01:03
【问题描述】:

我是 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();
        }
    }
}

【问题讨论】:

  • 我没有完整的答案,但有一件事让我印象深刻:我会在循环之前声明您的变量(var currentFocusvar followBinary),然后将值分配给他们在循环中。不过我会做更多的实验,看看能不能给你一个答案。
  • 那么followBinary的值是字符串类型,而不是整数?如果 followBinary 实际上是数字,则不会触发任何点击事件(因为您使用 === 而不是 ==)。
  • @BrettFromLA 在循环外声明变量不会有任何影响。而.getAttribute() 总是返回一个字符串(或null),所以followBinary 永远不会是数字。
  • 谢谢@Ian!那么,任何想法为什么该代码不起作用?它对我来说看起来很健壮。
  • @BrettFromLA 同意,总的来说它看起来不错。但首先提醒我的是document.querySelectorAll("follow js-follow btn btn-primary")——这是在寻找tagName(比如&lt;follow&gt;),而不是classes(比如&lt;button class="follow"&gt;)。这可能是最直接的问题。该循环也是低效的,因为它在 every* 迭代中调用document.getElementsByClassName("...。这可以放在循环之外

标签: javascript html web console


【解决方案1】:

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

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

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

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

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

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();
    }
}

【讨论】:

猜你喜欢
  • 1970-01-01
  • 2016-02-01
  • 1970-01-01
  • 1970-01-01
  • 2018-12-02
  • 2017-05-27
  • 1970-01-01
  • 1970-01-01
  • 2015-11-19
相关资源
最近更新 更多