2017-05-05 91 views
0

我正在嘗試編寫替換當前Cookie的腳本,然後轉到網站中的鏈接,然後替換下一個cookie。所有的cookie都存儲在一個數組中。 我有下面的代碼至今:運行某個鏈接而不點擊實際鏈接按鈕

var i; 
for(i=0;i<arr.length;i++){ 
    var cookie = arr[i]; 
    //setting the new cookie that was fetched from the array: 
    document.cookie = 'cookieName='+cookie+'; path=/'; 
    //Now I need to run the <a href> which links to a relative path 
    //I am currently in www.mydomain.com/page1/subpage1 
    //And the href is to /page1/subpage2.I want the script to run this link every iteration 
} 

我需要運行/page/subpage2鏈接,而無需實際點擊它使用JS。

該鏈接實際上並沒有改變當前頁面,它是運行一些服務器端代碼的鏈接,但你實際上留在www.mydomain.com/page1/subpage1同一頁上,這樣你就不必回重定向到page1/subpage1

這是一個簡單的網站,並鏈接沒有自己的元素的ID,它與看起來類似的東西鏈接表:

<table> 
<!--more rows here--> 
<tr>       
<td>       
<a class='table-row' href='/page1/subpage2'> Click </a> 
</td> 
</tr> 
<!--more rows here--> 
</table> 

回答

0

使用的forEach循環數組裏面。將el關聯到cookie並更改數組元素。然後觸發點擊具有所需的href的a。

// never define variables inside the loop when possible 
var cookie; 
arr.forEach(function (el, ind) { 
    cookie = el; 
    arr[ind] = 'document.cookie = \"cookieName='+cookie+'; path=/;"'; 
    document.querySelector('a[href="mypath"]').triggerHandler('click'); 
}); 
+0

我覺得我沒有使用正確的單詞(點擊),我想是該鏈接將沒有鼠標點擊自動按下,但JavaScript代碼運行的鏈接,所以也許點擊被濫用在這裏? – Foobarer

+0

是的,我認爲這個解釋並不十分清楚。 說實話,我不明白你想達到什麼目的。你想執行一些與href點擊相關的代碼,但是沒有真正點擊js的鏈接? – quirimmo

+0

是的,我在代碼中也有一個錯誤,我編輯它,我不小心將cookie寫入數組而不是設置它。 也添加了一些更多的解釋,希望它會更清晰 – Foobarer

0

您可以創建新的click事件並像下面的代碼那樣調度它。

在這個例子中,我們遍歷所有類table-row的鏈接,聽取點擊以查看它們是否工作(鏈接文本onClick的兩倍),併爲每個鏈接調度click

preventDefault()用於防止每次點擊導航。

ES6語法用於更清晰的代碼。

const links = document.getElementsByClassName('table-row'); 
 

 
const forEach = o => fn => Array.prototype.forEach.call(o, fn); 
 

 
const arr = []; 
 

 
forEach(links)((link, i) => { 
 
    arr[i] = 'document.cookie = \"cookieName='+link.href+'; path=/;"'; 
 
    
 
    // listen to click just to be able to see it in action 
 

 
    link.addEventListener('click', (e) => { 
 
    e.preventDefault(); // for testing purposes 
 
    const t = document.createTextNode(e.target.textContent); 
 
    e.target.appendChild(t); 
 
    }) 
 
    
 
    // here you generate a click programmatically: 
 

 
    const customClick = new MouseEvent('click', 
 
    { "view": window, "bubbles": true, "cancelable": true }); 
 
    link.dispatchEvent(customClick); // generate click 
 
})
<table> 
 
<!--more rows here--> 
 
<tr>       
 
<td>       
 
<a class='table-row' href='/relative/path1'> Click1 </a> 
 
</td> 
 
<td>       
 
<a class='table-row' href='/relative/path2'> Click2 </a> 
 
</td> 
 
<td>       
 
<a class='table-row' href='/relative/path3'> Click3 </a> 
 
</td> 
 
</tr> 
 
<tr>       
 
<td>       
 
<a class='table-row' href='/relative/path4'> Click4 </a> 
 
</td> 
 
<td>       
 
<a class='table-row' href='/relative/path5'> Click5 </a> 
 
</td> 
 
<td>       
 
<a class='table-row' href='/relative/path6'> Click6 </a> 
 
</td> 
 
</tr> 
 
<!--more rows here--> 
 
</table>

+0

對不起,當我說點擊我不是說我用鼠標點擊它,但那JavaScript代碼會自動運行鏈接,而不是我這樣做? – Foobarer

+0

嗯,我的代碼完全是這樣的 - 在每次迭代中,以編程方式逐個單擊鏈接。事件在最後一行代碼上觸發。 – wostex

+0

我已將註釋添加到我的代碼中,以便您可以看到發生了什麼。 – wostex