for循环中的JavaScript .click()只执行一次

时间:2015-03-02 04:15:21

标签: javascript html for-loop

我正在尝试在网站上模拟点击各种链接,然后使用它们来展开各个部分。开发人员不打算包括“全部展开”,并且至少有200个按钮我不想点击,所以我想我会使用 JavaScript 。但是欢迎任何其他想法。

我试图模拟点击的链接定义为:

<a id='a_link_1' href=...> ... </a>
<a id='a_link_2' href=...> ... </a>
<a id='a_link_3' href=...> ... </a>

我认为在Google Chrome的开发者控制台上使用类似的功能会起作用:

var level_one = [
    'a_link_1',
    'a_link_2',
    'a_link_3'
];

for (var i = 0; i < level_one.length; i++) {
    document.getElementById(level_one[i]).click();
}

问题在于仅适用于第一个链接。如果我改变链接的顺序,它仍然只适用于第一个。我实际上尝试设置一个计时器,一点点思考,这将解决问题,但事实并非如此。

为什么不激活所有链接以及正确的方法呢?谢谢!

如果你想测试它,网站是:http://www3.inegi.org.mx/sistemas/saic/(它是西班牙语)。


修改 @ chiliNUT的答案对我来说是最有用的,所以我会把它放在这里因为我不能把它标记为已接受的答案,因为它没有作为一个提交。

总结一下,

clickables = document.querySelectorAll('a[href^="javascript:"]'); 
for (i in clickables) { clickables[i].click(); }

将检索所有具有与之关联的链接的对象,以“javascript”开头(用于触发扩展链接)。 for loop实际上模拟了对它们的点击,一个接一个(小心!你最终可能会模拟对你不想要的东西的点击)。

就是这样。感谢@chiliNUT提供该解决方案。

3 个答案:

答案 0 :(得分:0)

使用以下jQuery代码

 jQuery.each( level_one, function( i, val ) {
      $( "#" + val ).click();
 });

答案 1 :(得分:0)

尝试使用jQuery

for (var i = 0; i < level_one.length; i++) {
    $("#"+level_one[i]).trigger("click");
}

答案 2 :(得分:0)

使用jQuery:

        $(level_one.map(function(e){return '#'+e}).join(',')).each(function(e,index){
                 setTimeout(function(){$(e).trigger('click')},index*1000)
});
  • a#a_link_1将立即触发(0 timout)
  • a#a_link_2将在1秒钟后触发(1000毫秒提示)
  • a#a_link_3将在2秒(2000毫秒时间)后触发

.....

  • a##a_link_n将在(n-1)秒后触发

  • level_one.map(function(e){return '#'+e}).join(',')相当于:'#a_link_1,#a_link_2,#a_link_3'