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