2011-09-12 11 views
3

Jqueryを学ぶのが初めてです。私は、HTML文字列を解析したい:jQueryを使用してHTMLを解析する

<tr> 
    <td class="first"><b><a href="/q?s=TOM">TOM</a></b></td> 
    <td class="second name">Tom is a good boy</td> 
    <td class="last_trade"><b><span id="yfs_l10_TOM">5.45</span></b> <nobr><span id="yfs_t10_TOM">Sep 9</span></nobr></td> 
    <td><span id="yfs_c10_TOM"><width="10" height="14" border="0" src="abcdefgh" alt="Down"> <b style="color:#cc0000;">14.49</b></span> <span id="yfs_p20_TOM"><b style="color:#cc0000;"> (72.67%)</b></span></td> 
    <td><span id="yfs_v00_TOM">4,100</span></td> 
    <td class="last"><a href="https://stackoverflow.com/q/bc?s=TOM">Chart</a>, <a href="/q?s=TOM">More</a></td> 
</tr> 

上記の文字列は、HTML に異なる値で10回を繰り返し、私は値を取得したい:TOM、5.45、14.49、72.67パーセント、4100全10 repititionsのためにHTMLの類似した文字列の

+1

あなたは何を試しましたか? – Candide

+0

'string.split()'があなたの必要性に十分でない場合、おそらく正規表現と 'string.match()'を使いたいでしょう。 (それらは、jQueryではなくプレーンなJavaScriptメソッドです) – Blazemonger

+4

正規表現を使用することを提案するすべての人に、[RegExはXHTML自己完結型タグを除くオープンタグとマッチする]へのリンクを取得します(http://stackoverflow.com/questions/1732348/regex -match-open-tags-except-xhtml-self-contained-tags)。 Shilpi Gautamは、HTMLを解析することでjQueryを学びたいのであれば、別の方法を試してみることをお勧めします.jQueryは実際にはHTMLを解析するものではなく、学習するのには適していません。 – Albireo

答えて

0

JavaScriptを使用する正規表現(AKA正規表現):

var data = "TOMTom is a good boy5.45 Sep 9 14.49 (72.67%)4,100Chart, More"; 
var regex = /^(.+)Tom is a good boy([0-9\.]+) [^\s]+ [0-9]+ ([0-9\.]+) \(([0-9,]+)%\)([0-9\.]+)/ 
var extracted_data = data.match(regex); 
alert(extracted_data[0]); 
alert(extracted_data[1]); 
alert(extracted_data[2]); 
alert(extracted_data[3]); 
+0

質問が変わったので、私の答えは適切ではありません。これは、DOMではなくStringを解析する必要がある場合のソリューションです。 –

0

することができますeachとテーブルの行をループし、クラスで値をつかみます。私はあなたが必要なjQueryのセレクタを使用してあなたを助けるために作成した

$("#table1 tr").each(function() 
{ 
    $this = $(this); 
    var firstName = $this.find(".first").text(); 
    var secondName = $this.find(".second").text(); 
    // ... 
}); 
4

Here is a working sample。 jQueryのコードは、各trループ:

var results = []; 

$("table tr").each(function(i) { 
    results[i] = { 
     firstName: $("td.first", this).text(), 
     lastTrade: $("td.last_trade span:first", this).text(), 
     down: $("td.last_trade", this).next("td").find("span:first").text(), 
     downPercentage: $("td.last_trade", this).next("td").find("span:last").text(), 
     someOtherNumber: $("td.last", this).prev("td").text() 
    }; 
}); 

あなたはプロパティ名を変更し、ニーズに基づいてresultsを使用する必要があります。更新質問に基づいて

+1

私にとって非常に簡潔な方法、それは私にとって非常に良いレッスンです;-) – gordatron

0

...

私は個人的には、各行のデータを格納するオブジェクトを作成します。

pupil = function() { 
     this.name; 
     this.score; 
     this.dob; 
     //..etc 
    } 

そのページは、例えばロードされると、配列を移入:

$(function() { 
     var pupils = []; 
     $('table').find('tr').each(function (x, d) { 
      temp = new pupil(); 
      temp.name = $(d).find('.first').find('a').html(); 
      //...etc... 
     }); 
    }); 
+1

ErickPetruの答えを使って、もっと良い方法を教えてくれました;-) – gordatron

+1

は、 htmlの...はるかに良い;-) – gordatron

関連する問題