2014-03-03 33 views
-1

我有這樣的HTML代碼的網頁使用parentNode多次

<tr class="tt_row"> 
    <td class="ttr_type"><a href="?cat=17"><img src="/pic/abc-aaa-bb.png" alt="aa/bb-cccc" /></a></td> 
    <td class="ttr_name"><a href="abc?id=2221" title="Test.2123.123"><b>Test.2123.123</b></a><br /><span class="pre">Test test</span> <span class="newtag">NEW!</span></td> 
    <td class="td_dl"><a href="upload/222083/1348hgfhfchf5675675/Test.2123.123"><img src="/pic/aaab.gif" style="vertical-align: middle;" alt="Upload" /></a></td> 
    <td class="ttr_size">1.65 MB<br /><a class="small" href="abc?id=2221&amp;filelist=1#filelist">15 Files</a></td> 
    <td class="ttr_comments">0</td> 
    <td class="ttr_added">2014-03-03<br />11:11:11</td> 
    <td class="ttr_snatched">0<br />times</td> 
    <td class="ttr_seeders"><b><a href="abc?id=2221&amp;peers=1#seeders">0</a></b></td> 
    <td class="ttr_leechers">0</td> 
</tr> 

而且這個腳本Greasemonkey的

function initMenu(aEvent) { 
    // Executed when user right click on web page body 
    // aEvent.target is the element you right click on 
    var node = aEvent.target.parentNode; 
    var node1 = aEvent.target; 
    var item = document.querySelector("#userscript-search-by-image menuitem"); 
    if (node.localName == "a") { 
     if (node1.getAttribute("src") == "/pic/aaab.gif") { // ABV 
      body.setAttribute("contextmenu", "userscript-search-by-image"); 
      item.setAttribute("imageURL", node.href); 
     } 

此腳本修改上下文菜單中有一個新的條目,當我用鼠標右鍵單擊

<img src="/pic/aaab.gif" style="vertical-align: middle;" alt="Upload" /> 

和parentNode我去

<a href="upload/222083/1348hgfhfchf5675675/Test.2123.123"> 

並保存HREF與

item.setAttribute("imageURL", node.href); 

什麼我不能做的就是從

<img src="/pic/abc-aaa-bb.png" alt="aa/bb-cccc" /> 

保存ALT我試圖

node3 = node.parentNode.parentNode.firstChild.firstChild.firstChild 

<img src="/pic/abc-aaa-bb.png" alt="aa/bb-cccc" /> 

item.setAttribute("imageALT", node3.alt); 

我應該怎麼辦?我是JavaScript和DOM的新手。

+0

有一個明確的'if'條件做某些動作,只有當點擊圖像'.getAttribute( 「SRC」)==「/ PIC/aaab.gif「'...它與'parentNode'無關。 – Bergi

回答

1

我試過node3 = node.parentNode.parentNode.firstChild.firstChild.firstChildnode = <img src="/pic/aaab.gif" style="vertical-align: middle;" alt="Upload" /><img src="/pic/abc-aaa-bb.png" alt="aa/bb-cccc" />

.firstChild確實得到了DOM中的第一個子節點 - 它不需要是實際的元素,但可以是任何節點類型。在你的情況下,<tr>firstChild是空白文本節點(在<td>之前的HTML中的換行符)。

我該怎麼辦?

您可以改爲使用.firstElementChild property

但是,嚴重依賴DOM的確切結構可能不是好的做法。也許你可以試試

<tr>.querySelector("td.ttr_type img") 
<tr>.getElementsByTagName("img")[0] 
<tr>.cells[0].firstChild.firstChild 
0

我解決了這個由

node3 = node.parentNode.parentNode.getElementsByTagName('*')[0].firstChild.firstChild; 
+0

請添加一個簡短的解釋,說明你做了什麼以及它如何幫助 - 單線通常是不鼓勵的! – LordT