2011-12-31 9 views
0

javascriptインジェクションを使用して、ウェブサイトの特定のテキストにアクセスしたいとします。JavaScriptインジェクションを使用してウェブサイトのテキストにアクセスする

しかし、私はHTMLを使っていますが、ほとんどの人がIDが不足していることが分かります。そのため、テキストへのアクセス方法はわかりません。例えば

、HTMLの2行以下のとおりである。

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

はまだこのテキストが言う見つけるのどのような方法があるでしょうか?また

、DOは、そのテキストが言うことを知っていれば、テキストの以下のビットを見つけるのいずれかの方法がある...それはページ上本当に依存だ

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

IDなしでは、あなたが到達しようとしているノードで家に帰るのは難しいでしょう。いくつかの正規表現を使用したり、サーバーサイドのスクリーンスクレイピングを試してみたりすることもできますが、これらのソリューションはかなり簡単に機能します。 –

+0

ページの大部分が常に同じ場合はどうなりますか?これは単に異なる詳細なものです。言って、毎回異なる統計情報を使ってレポートを表示しています。詳細を知りたいです。 – Randomman159

+0

私はあなたが必要とするタグを特定することができるかなり良いチャンスを立てていると思います.getElementsByTagName( "h1")でコレクションを収集し、返されたコレクションを反復処理します。 –

答えて

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"); 

などという読むあなたは、このような何かをしたいと思います3つ目の要素を選択します。そのテーブルの行をすべて取得し、5番目の行を選択します。その行のすべてのセルを取得します。 100%の幅とvaligned topを持つものを探して、彼らがh1を持っているかどうかを見てください。

フィドル:http://jsfiddle.net/JUK5R/26/

+0

うわー...ありがとうごめんなさい:) あなたがそれにいる間に私が持っていたいくつかの他の質問に答えました:D ありがとうございました! – Randomman159

+0

確かに! :) jQueryは最近人気が高まっているので、「昔ながらの」方法を見落とすのは簡単です。 – benesch

+0

簡単な質問ですが、あなたが取得しているh1がtd内にあることを確認するにはどうすればよいですか?私はそれがうまくいく方法を考え出すことができません。上のコードがそうであるかどうかは分かりませんが、h1が検索結果に影響されないようにforループが何も成立していないようです。 – Randomman159

3

。例えば

、あなたは常に第三H1に興味があるならば、あなたは(jQueryを使って例を、せずにそれを行うことも簡単である)ことができます:

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

しかし、ページがdinamycallyあり、場合あなたは常にあなたの要素に到達するための再現可能な方法を見つける必要があります(たとえば、id xxxのテーブルを取得し、yyyのテキストを見つけて2番目のdiv子要素を取るまで行を調べます)。

これはおそらく100%の時間では動作しませんが、実際には他の解決策はありません。

EDIT:例えば、私はあなたが

// 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 xxxでテーブルを取得し、テキストyyyでテーブルを見つけて2番目のdivの子要素を取る"と言ったように、どこを見て/何をすべきかを調べるためのクイックポインタはありますか?ありがとう – Randomman159

+1

そして、それは4番目のh1を返すだろうか? – Randomman159

+0

確かに、それは修正された4番目を得るだろう! – nico

関連する問題