2012-02-07 48 views
0

页面中有很多链接,我需要快速单击带有文本“删除”的链接。 这会导致AJAX请求,因此需要稍微暂停一下。 什么是JavaScript书签代码(没有库,例如jQuery),它会将绑定到链接的onclick()事件直接作为属性直接调用,但只有那些带有文本“删除”的属性?Javascript Bookmarklet用于点击具有特定文本的链接

至于我自己能行,我得到:

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

抱歉说出来,但听起来有点粗略。 – 2012-02-07 18:32:59

+0

什么浏览器?如果它只是一个浏览器(比如Chrome),它与支持所有浏览器的任务完全不同。 – 2012-02-07 18:34:01

+0

亨里克,我更新了这个问题,使它尽可能直观。 – 2012-02-07 18:37:38

回答

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​​请求。 “正确”的方法是制定请求的时间,但是对于你的任务一秒或一半可能就足够了。

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是否包含单词删除。如果链接标记中有任何其他HTML或文本,您的代码将无法工作。其次,setTimeout中的命令修复了一个范围问题,其中当运行setTimeout时,变量i不存在。最后,请注意,超时被指定为j * 500,每次发现“删除”链接时,j都是一个单独的变量。 setTimeout不会等待半秒,运行代码并返回。而是立即返回,然后在指定时运行代码。这样做,第一个链接将在一毫秒内(0 * 500 + 1 = 1)点击,第二个链接在501毫秒内,下一个在1001内等。

我也想提一下最新的Firefox版本似乎不支持直接在地址栏中输入书签。您必须使用Web控制台(Ctrl + Shift + K)或JavaScript暂存器(Shift + F4)来运行这样的代码片段。如果你这样做,在开始处删除javascript:部分。

相关问题