2012-02-07 73 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:部分。