2009-11-09 64 views
0

我想要做的是插入一個鏈接和IMG爲我使用這個論壇的每個線程。鏈接的href應該基於元素的子元素的href。 以下是HTML的部分視圖,爲了清楚起見,我已經拿出了一些東西,讓我知道如果我採取了太多。在最後的標籤重複20周左右的時間,這取決於多線程如何在喜好從另一個鏈接插入鏈接greasemonkey

<div id="content"> 
    <form id="page_form"> 
     <div id="forums"> 
      <table class="grid forumtable"> 
       <tr></tr> 
       <tr></tr> 
       <tr> 
        <td></td> 
        <td></td> 
        <td></td> 
        <td> 
        <div class="lastposter"> 
         <a></a> 
         <a href="view/1234/?page=last#845612"><img></img></a> 
        </div> 
        </td> 
       </tr> 
       <tr> ...same as above.. x20 </tr> 
      </table> 
     </div> 
    </form> 
</div> 

因此,這裏是我的代碼,到目前爲止,通過插入一個靜態鏈接的工作可見。我想要的是使用上一個鏈接#後的值的鏈接。

var lastpst = document.getElementsByClassName('lastposter'); 
for (var i=0; i < lastpst.length; i++){ 
links = document.createElement('a'); 
links.setAttribute('href','we.html'); 
links.innerHTML ='<a href="we.html"><img src="/static/img/silk/zoom.png" /></a>'; 
lastpst[i].appendChild(links); 
} 

那麼如何從lastpst [i]訪問標籤並使用href創建自己的鏈接?

我在想這可能是用XPATH編寫的,但是我無法理解它。在這種情況下,這會是一個好主意嗎?

對不起,這個冗長的問題。

回答

1

繼續你自己的迴應,你應該真的自己處理DOM操作,而不是將它插入到另一個標籤中。另外,將A標籤放在A標籤中可能是一個壞主意。

var lastpst = document.getElementsByClassName('lastposter'); 

for (var i=0; i < lastpst.length; i++){ 
    l = lastpst[i].getElementsByTagName('a'); 
    ln = l[1].getAttribute('href'); 
    ln = ln.replace(/(?:.*?)#([0-9]{6})/,'/post/view/$1'); 

    links = document.createElement('a'); 
    links.href = ln; 

    img = document.createElement('img'); 
    img.src = "/static/img/silk/zoom.png" 
    links.appendChild(img); 

    lastpst[i].appendChild(links); 
} 
+0

好點..我一直認爲.innerHTML是一個骯髒的黑客攻擊。謝謝 :) – aland 2009-11-09 19:08:06

1

首先,您的代碼示例在上面你意識到你正在創建一個鏈接(一個標籤),然後通過的innerHTML築巢它內部的第二環節?你可能不希望這樣做...

如果我理解正確的問題,這裏是我會做什麼:

var lastpst = document.getElementsByClassName('lastposter'); 
for (var i=0; i < lastpst.length; i++){ 

var secondLink = lastpst[i].getElementsByTagName('a')[1]; 
var secondLink = secondLink.href; 

// whatever you need your own code to do... 
} 

希望這有助於。

1

其實我覺得我解決了這個問題。(感謝邁克爾,我已經解決了這個代碼了感謝你的輸入)

var lastpst = document.getElementsByClassName('lastposter'); 

for (var i=0; i < lastpst.length; i++){ 
l = lastpst[i].getElementsByTagName('a')[1]; 
ln = l.getAttribute('href'); 
ln = ln.replace(/(?:.*?)#([0-9]{6})/,'/post/view/$1'); 

links = document.createElement('a'); 
links.setAttribute('href',ln); 
links.innerHTML ='<img src="/static/img/silk/zoom.png" />'; 
lastpst[i].appendChild(links); 
} 

任何人都看到什麼錯呢?

+1

是的,在鏈接元素的情況下,您也可以直接檢查href屬性而不必使用getAttribute。然而,無論任何方式的開銷可能是微不足道的您的需求 – donohoe 2009-11-09 18:46:16