【问题标题】:Looping over querySelectorAll [closed]循环 querySelectorAll [关闭]
【发布时间】:2019-12-19 00:33:05
【问题描述】:

我正在尝试将我的 queryselectorall 点击放在一个循环中,所以我不必这样做:

document.querySelectorAll('.class a')[1].click();
document.querySelectorAll('.class a')[2].click();
document.querySelectorAll('.class a')[3].click();

我想弄一段时间,直到索引是 47,我试着让它变成这样

var class = document.querySelectorAll('.class a');
var i;
while (i < 47){
 class[i].click();
 i++;
}

但不工作。

【问题讨论】:

  • class 是一个非常糟糕的变量名称。使用不同的。如果您查看控制台,JS 会准确地告诉您...
  • 您是否遇到任何错误?它怎么不工作?
  • 还要初始化i,否则当条件为假时开始
  • 我实际上并没有使用类作为变量的名称,这只是一个例子;我初始化了 i = 0;但它不起作用。
  • @antonellamanzur 解决了检查这里jsfiddle.net/0zquL1e3/7

标签: javascript while-loop jquery-selectors


【解决方案1】:

对于初学者,您永远不会将 i 变量初始化为 0,因此当您开始循环时,i 等于 undefined。接下来,您需要更改变量名称。 classfunction 一样是保留字。此外,如果您希望索引转到索引 47,则需要执行 i &lt; 48i &lt;= 47,否则循环将在索引 46 处停止。话虽如此,如果您使用查询的长度会更好您只选择了 querySelectorAll() 指向的元素。否则,如果选择器指向的元素数量在您的 HTML 中发生了变化,您必须记住进入并更改循环中的硬编码数字,否则会出现问题。在声明变量后立即将长度缓存在另一个局部变量中会更好。

试试这个:

var classAPointer = document.querySelectorAll('.class a'),
    numClassAElements = classAPointer.length,
    i = 0;

for (; i < numClassAElements; ++i) {
  classAPointer[i].click();
}

您可能有兴趣阅读有关循环 querySelectorAll NodeList 的不同方法的这篇文章:https://css-tricks.com/a-bunch-of-options-for-looping-over-queryselectorall-nodelists/(最高效的方法是像上面这样的常规 for 循环或使用 for... of 循环,您应该只如果您不关心支持 IE 或旧版浏览器,请执行此操作)

【讨论】:

  • 我刚刚做了,但还是不行
  • “不工作”不是一个有用的评论。请提供控制台错误或某种其他指示正在发生的事情。如果您不能或不知道如何提供更多调试信息,请编辑您的问题以包含更多代码。再次检查我的答案,因为自从我第一次发布以来我已经对其进行了编辑。除非我打错字,否则我认为问题很可能出现在代码的其他地方。
  • 我没有收到任何错误,脚本只是停止并且它没有显示查询选择器中的任何元素。
  • 您看过我对这个答案的最新编辑吗?如果您有但它仍然不起作用,请编辑您的问题以包含更多代码。你的查询选择器中没有显示任何元素是什么意思?你的意思是它没有从 DOM 中选择任何元素吗?尝试在循环之前快速执行console.log(classAPointer),然后检查控制台并确保它正在记录一个包含所有元素的节点列表。如果不是,那么问题是您传递给querySelectorAll 的论点。 .class a 选择 &lt;a&gt; 属于 .class 类元素的子元素
猜你喜欢
  • 2015-08-30
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-03-31
  • 2012-04-07
  • 2011-07-30
  • 2016-03-25
相关资源
最近更新 更多