2010-05-26 64 views
1

我正在寫一個Greasemonkey腳本,並且我想通過使用XPath來選擇在某個用戶名之後發生的帖子正文,從而在phpBB2論壇上更改論壇帖子的文本,但整個事情是一堆巨大的桌子。phpBB論壇的XPath表達式

<tr> 
    <td> 
    <span class="name"> 
     <a> 
     <b>username</b> 
    </span> 
    <span></span> 
    </td> 
    <td> 
    <table> 
     <tbody> 
     <tr></tr> 
     <tr></tr> 
     <tr> 
      <td> 
      <span class="postbody">text of post</span> 
      <span></span> 
      </td> 
     </tr> 
     </tbody> 
    </table> 
    </td> 
</tr> 

我需要得到在b標籤中的用戶名等於某個名稱後發生的後身跨度,然後弄亂文本。下面是我想做到這一點:

var postguy = document.evaluate('fffffff', document, null, XPathResult.UNORDERED_NODE_SNAPSHOT_TYPE, null); 
for (var i = 0; i < postguy.snapshotLength; i++) { 
    thisLink = postguy.snapshotItem(i); 
    //then do something with the post 
} 

回答

3

我會做這樣的:

//tr[.//b/text()='username']//span[@class='postbody'] 

爲了與意見一致,你可以通過限制在b縮小東西下來了一點標籤是:

//tr[.//span[@class='name']//b/text()='username']//span[@class='postbody'] 

該死!我太急於爲那些@ s。放慢速度,有時會聞到@

+0

如果有人將神奇的用戶名加粗顯示在他們的帖子文本中,會給出誤判,我想 - 我想我們需要將搜索用戶名限制在'name'類的範圍內。 – AakashM 2010-05-26 15:56:11

+0

@AakashM:一個公平的建議。我將添加限制。 – Welbog 2010-05-26 15:56:57

+0

你需要在類的前面放一個@。 – Biff 2010-05-26 20:07:21