2011-12-31 51 views
0

我想使用JavaScript注入來訪問網站上特定位置的文本。使用Javascript注入訪問網站上的文本

但是,通過HTML瀏覽器,我發現它的大部分缺少Id,所以我不知道如何訪問文本。

例如,HTML的兩行如下:

<td valign="top" width="100%" > 
<h1>My example heading</h1> 

會仍然是找到了什麼本文說的什麼辦法?

而且,如果知道,文中說了什麼,有沒有找出下列文本位的任何方式......

<td valign="top" width="100%" > 
<h1>You are trying to work out:</h1> 
<h1>This text</h1> 
+1

不太可能。如果沒有id,那麼你很難在你試圖訪問的節點上找到它。你可能會喜歡一些正則表達式,或嘗試一些服務器端的屏幕截圖,但這些解決方案非常容易中斷。 – 2011-12-31 17:20:24

+0

如果網頁的大部分總是相同的話會怎麼樣。這只是特定的細節,是不同的。比如說,一份報告正在顯示,每次都有不同的統計數據,我想了解詳情。 – Randomman159 2011-12-31 17:29:15

+0

然後我會說你站在一個相當好的機會,能夠通過.getElementsByTagName(「h1」)收集它們並通過獲取返回的集合進行迭代來精確定位所需的標記。 – 2011-12-31 21:12:18

回答

4

哦,那不是太糟糕的。你會想要做這樣的事情:現在

var els = document.getElementsByTagName("td"); 
var text1 = ""; 
var text2 = ""; 
for (var i = 0; i < els.length; i++) { 
    if (els[i].width == "100%" && els[i].getAttribute("valign") == "top") { 
     var h1s = els[i].getElementsByTagName("h1"); 
     if (h1s.length > 0) text1 = h1s[0].innerHTML; 
     if (h1s.length > 1) text2 = h1s[1].innerHTML; 
    } 
} 

,如果有大量的表格,你可能需要更換這個第一行:

var els = document.getElementsByTagName("table")[2].getElementsByTagName("tr")[4].getElementsByTagName("td"); 

閱讀爲:獲取表元素,請選擇第三個元素。獲取該表的所有行,選擇第五個。獲取所有行的單元格。找到任何100%寬度和頂部的值,看看他們是否有H1。

小提琴:http://jsfiddle.net/JUK5R/26/

+0

哇...謝謝堆:) 並回答了我在你遇到的其他幾個問題:D 感謝一堆! – Randomman159 2011-12-31 17:40:54

+0

當然可以! :) jQuery現在非常流行,很容易忽視「老式」的方式。 – benesch 2011-12-31 17:44:16

+0

快速的問題,你如何確保你所得到的h1在td內?我似乎無法弄清楚這將如何工作。不知道上面的代碼是否存在,但似乎for循環沒有實現,因爲h1的搜索方式不受搜索結果的影響。 – Randomman159 2011-12-31 17:58:48

3

這真的取決於在頁面上。

舉例來說,如果你一直有興趣在第三H1那麼你可以(例如使用jQuery,但它是那麼容易做到這一點沒有):

h1s = $("h1"); 
myh1 = h1s[2]; 

但是,如果該頁面是dinamycally生成你將不得不找到一些可重複的方式來總是得到你的元素(例如,獲取id爲xxx的表,通過行,直到找到一個文本爲yyy,並採取第二個div子元素)。

這種情況很可能不會發揮100%的效果......但實際上沒有其他解決方案。

編輯:例如,做什麼,我說上面你可以做

// Get all the tds of the table with id tableid 
table = $("#tableid td"); 

// Go through the td 
for (var i=0; i<tds.length; i++) 
    { 
    // If the content of the cell matches some pattern 
    if ($(rows[i]).text().match(/somestring/)) 
     { 
     // Get the span children of the td 
     divchildren = $(rows[i]).children("span"); 
     // Take the 2nd 
     requiredText = $(divchildren[1]).text(); 
     } 
    } 
+0

希望我不會在這裏得到「先學習javascript基礎知識」的回覆,但我對javascript完全陌生,目前正在學習它。任何關於在哪裏查看/做什麼的快速指針,按照您所說的「通過id獲取表格,遍歷行,直到找到一個帶有文本yyy,並採用第二個div子元素」?謝謝 – Randomman159 2011-12-31 17:31:00

+1

並不會返回第4個H1? – Randomman159 2011-12-31 17:32:23

+0

當然,它會得到第四,更正! – nico 2011-12-31 18:00:19