2010-05-25 25 views
3

我寫的解析頁面具有以下一般結構的Greasemonkey腳本:通過JS/JQuery中的DOM獲取BR分隔的文本?

<table> 
<tr><td><center> 
<b><a href="show.php?who=IDNumber">(Account Name)</a></b> 
(#IDNumber) 
<br> (Rank) 
<br> (Title) 
<p> 
<b>Statistics:</b> 
<br> 
<table> 
<tr><td>blah blah etc. 
</td></tr></table></center></table> 

我專門試圖抓住(標題)部分了這一點。然而,正如您所看到的,它僅由<BR>標籤引發,沒有自己的ID,僅僅是<CENTER>標籤文本的一部分,而且該標籤還有一大堆與其相關的其他文本。

現在我正在做的是取得中心標記的innerHTML並使用正則表達式來匹配/<br>([A-Za-z ]*)<p><b>Statistics/。這對我來說可行,但感覺就像有一種更好的方法可以從那裏選擇特定的文本。

...那麼,有沒有更好的方法?或者我應該向網站程序員抱怨他需要讓文本更易於訪問? :-)

+1

很長一段時間之前我已經看到了'

'標籤...它從1998年開始不推薦使用。 – BalusC 2010-05-25 19:53:02

+0

Google的主頁仍然使用它來居中搜索區域:)但是我仍然不會寬恕它。 – 2010-05-25 20:20:47

回答

3

編輯:更新,刪除空白

var title = $('table center').contents().filter(function() { 
     if(this.nodeType == 3 && $.trim(this.data) != "") { //get only text nodes and filter out whitespace elements 
      return true; 
     } 
     }).get(2); // get the 3rd text node 


    alert(title.data); // alerts "(Title) 
    title.data = "How to use jQuery"; // (Title) changes 

工作原理:

的功能是通過所有提供的節點的節點上運行,在這種情況下,這是中心的標籤。文本是nodeType 3,所以你會得到這些數組。你的例子有關閉中心標籤錯位,所以這可能會給你錯誤,但我認爲你明白了。 (我覺得你在說結束之前缺少)

你總是可以:

$('table center').contents().filter(function() { 
     if(this.nodeType == 3 && $.trim(this.data) != "") { //get only text nodes and filter out whitespace elements 
      return true; 
     } 
     }).wrap('<p></p>') // make those text nodes paragraphs 
     .end().filter('br') 
     .remove(); // remove the brs 

看到jquery docs on .contents()

+0

IE產生不同的結果。 Firefox和Safari將(標題)放置在第4個textNode中,IE將它放在第3箇中。 – user113716 2010-05-25 20:52:50

+0

固定中心標籤?我知道IE將空間視爲文本節點,認爲是這樣嗎? – 2010-05-25 20:54:02

+0

很難說。我只是稱他們像我看到他們。 :o) – user113716 2010-05-25 20:57:53

1

這似乎工作:

var result = $('table td:first-child > center > br:eq(1)').get(0) 

alert(result.nextSibling.nodeValue); 
+0

不錯 - 獲得br之後的節點,精彩! – 2010-05-25 21:09:53

+0

@丹Heberden - 謝謝。這讓我很難過。修剪空白的解決方案是一個很好的解決方案! – user113716 2010-05-25 21:14:28