页面中有很多链接,我需要快速点击其中包含文本“删除”的链接。 这会导致AJAX请求,因此需要稍微停顿一下。 什么是javascript bookmarklet代码(没有库,例如jQuery),它会快速调用绑定到链接的onclick()事件作为属性,但只有那些文本为“Delete”的那些?
就我自己而言,我得到了:
javascript:
(function(){
var links = document.getElementsByTag('a');
for(var i = 0; i <= links.length; i++){
if(links[i].innerHTML == "Delete"){
setTimeout("links[i].onclick()", 500); // pause for previous AJAX to proceed
}
}
})();
答案 0 :(得分:2)
试试这个:
javascript:j=0;l=document.links;for(var i=0;i<l.length;i++){if(l[i].innerHTML.toLowerCase().indexOf("delete")!=-1){setTimeout("l["+i+"].onclick();",j*500+1);j++;}}
注意几件事。首先,我刚刚检查了链接标记中的HTML是否包含单词delete。如果链接标记内有任何其他HTML或文本,则代码将无法正常工作。其次,setTimeout中的命令修复了一个范围问题,其中当运行setTimeout时变量i不存在。最后,注意超时被指定为j * 500,j是每次找到“delete”链接时递增的单独变量。 setTimeout不等待半秒,运行代码,然后返回。而是立即返回,然后在指定时运行代码。这样做,第一个链接将在一毫秒(0 * 500 + 1 = 1)中点击,第二个链接在501毫秒,下一个在1001,等等。
我还想提一下,最新版本的Firefox似乎不支持直接在地址栏中输入bookmarklet。您必须使用Web控制台(Ctrl + Shift + K)或JavaScript暂存器(Shift + F4)来运行这样的代码段。如果你这样做,请删除开头的javascript:部分。
答案 1 :(得分:1)
onclick
通常不能像这样使用 - 有时事件不直接绑定到对象。此解决方案模拟了点击。相反,您必须使用element.eventDispatch
,我通过搜索how to trigger events找到它。
所以这是应该有用的东西:
(function(){
// First we create the event
var evt = document.createEvent("MouseEvents");
evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0, false, false, false, false, 0, null);
var links = document.getElementsByTag('a');
for(var i = 0; i <= links.length; i++){
if(links[i].innerHTML == "Delete"){
// And here, we trigger the event
setTimeout("links[i].dispatchEvent(evt)", 500); // pause for previous AJAX to proceed
}
}
})();
我不确定等待AJAX请求的方法。 “正确”的方式是在请求时解决问题,但是对于你的任务,一两秒或两半就足够了。