去年我问了一个问题,类似于我在这里提出的问题 -
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);
}
}
})();
答案 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
获取第一个元素,并继续将其传递给后续回调。