2017-05-12 18 views
0

最近、タイトルに関連付けられたフィールドの値をページで検索するコードを書く必要がありました。jQueryセレクタ次の兄弟の最後の要素

var strFruitType = $('span').filter(function(){ 
 
      return $(this).text() === 'Type of Fruit:'; 
 
    }).closest('td').next().find(':last').text().trim(); 
 

 
    //Evaluate Fruit Type. 
 
    switch(strFruitType) { 
 
    ...etc...

は、これが最も簡単ですか:私は、次のjQueryを使って問題を解決し

<table><tr> 
 
    ...etc... 
 
    <td><div><span>Type of Fruit:</span></div></td> 
 
    <td><span><div><span><div>Orange</div></span></div></span></td> 
 
    ...etc... 
 
    </tr></table>

:HTMLの構造は、次のような形式であります何かの次の兄弟の最後の要素を見つけるための効率的な方法?

+0

あなたはHTMLを制御していますか? –

+0

いいえ、私はHTMLを制御できません。私の仕事は、タイトル「果物のタイプ:」(明らかに実際のタイトルやデータではない)に関連する価値を決定し、それに基づいて行動することです。ページ上に他のタイトル/値の組み合わせがありますので、評価する必要があります。 –

答えて

3

HTMLを制御できない場合は、見た目はかなりよく見えます。物事だけのカップル:

「果物の種類:」が含まれていること、文字列を検索する場合はOKですが、あなたが行うことができます:

:あなたもに短縮することができるかもしれ

$('span:contains("Type of Fruit:")').closest('td').next().find(':last').text().trim(); 

$('td:contains("Type of Fruit:")').next().find(':last').text().trim(); 

また、私はあなたの例がどのように単純化されたわからないんだけど、あなたは兄弟で最も深い要素を見つけるために、:lastを使用することができるように見えますtd素子。しかし、:lastは本当に最後の直接の子を見つけます。だからあなたのtdはこのような複数の直接の子を持つことができた場合:

<td> 
    <span><div><span><div>Orange</div></span></div></span> 
    <span><div><span><div>Apple</div></span></div></span> 
</td> 

あなたは「アップル」で終わるだろうが、:lastが直接td内の二spanを発見したためです。あなたのtdに直接子供が1人しかいない場合は、:lastは必要ありません。

これはで私たちを残します:

$('td:contains("Type of Fruit:")').next().text().trim(); 
関連する問題