创建一个bookmarklet,在没有jQuery的情况下单击一个页面上的多个按钮

时间:2014-05-31 13:57:36

标签: javascript bookmarklet

去年我问了一个问题,类似于我在这里提出的问题 -

Create a Bookmarklet that clicks multiple buttons on one page

接受的答案在使用jQuery的页面上完美运行。但是我需要在不加载jQuery的页面上进行类似的工作。我试图将jQuery插入到书签中的页面中,但它拒绝加载(网站不允许)。

如何将以下内容转换为纯Javascript,以便点击页面上的多个按钮?

(function(){
    var UserFollowButton = $('button.UserFollowButton');
    var index = UserFollowButton.length-1;
    follow();

    function follow(){
        if(index >= 0){
            $(UserFollowButton[index--]).click();
            setTimeout(follow, 500);
        }
    }
})();

1 个答案:

答案 0 :(得分:0)

要获得与您刚刚运行的查询等效的UserFollowButton列表,您应该使用getElementsByClassName("UserFollowButton"),它会为您提供具有特定类名的HTMLCollection个元素。然后,您可以将该集合过滤为tagName等于BUTTON的元素。

然后,要单击它,只需将方法DOMElement.click应用于数组中的每个元素即可。您可以使用forEach

执行此操作
Array.prototype.slice.call( // convert HTMLCollection to Array
    document.getElementsByClassName("UserFollowButton")
 ).filter(function(element) {
     return element.tagName === "BUTTON";
}).forEach(function(element){
    element.click();
});

如果您想要超时,那么您只需将UserFollowButton设置为Array.prototype.slice.call(document.getElementsByClassName("UserFollowButton")).filter(function(element) { return element.tagName === "BUTTON"; });,然后使用UserFollowButton[i].click()而不是隐式jQuery转换执行您当前正在执行的操作。

不是使用全局变量进行索引,而是尝试将数组保持为本地,将其作为参数传递,使用pop获取第一个元素,并继续将其传递给后续回调。