2016-04-18 4 views
3

私は、製品の価格を表示するページを扱っています。通常、それはこのようになりますが:さまざまなHTML構造のjQueryセレクター

<span id="priceText"> 
    $26.94 
</span> 

アイテムが販売されて、それは次のようになります。

<span id="priceText"> 
    <strike>$26.94</strike> 
    <span class="salePrice">$25.00</span> 
</span> 

が、私はそうのような任意のページから価格を抽出し、汎用的な機能を持っています
var getPrice = function(price_id) { 
    return jQuery(price_id).text(); 
}; 

ここで、price_idは価格を含む要素のIDです。

はっきり分かるように「売却」バージョンは、私がpriceText

にprice_id設定されている場合、私は、製品の上のHTMLを制御することはできません両方の$ 26.94と$ 25.00返されるので、これは、上記の構成では動作しませんページ、私は構造を変更することはできません。このHTML構造を持たない他のページでgetPrice関数を使用する必要があるので、変更しないようにしたい。

私が探しているのは、アイテムが販売されている場合は$ 25.00、そうでない場合は$ 26.94を返すjQueryセレクタのようなものです。

jQuery('#priceText .salePrice').length ? jQuery('#priceText .salePrice').text() : jQuery('#priceText strike').text() 

は、しかし、私はこのようなコードのカスタムラインを避けたい:ような何かは、私は現在、次の処理を行い、カスタムスニペットを持って

「NOTストライクタグにpriceTextの内部のすべてのテキストを返します」。私はこれがjQueryセレクタだけでは不可能かもしれないと思うが、私は誰かが私を間違っていると証明したいと思っている!

答えて

3

あなたはmultiple selectorを使用することができます。

jQuery('#priceText .salePrice, #priceText:not(:has(.salePrice))').text() 

DEMO

+0

ああ、それは美しさのものです!私はそれを試してみましょうが、私はこれがまさに私が探していたと思います – Pabs123

+1

良い解決策! Plunker https://plnkr.co/edit/2wNRMNAnywtPcEOuU4ri?p=preview –

+0

これは素晴らしく、複数のセレクタを使用するとは考えていませんでした。セレクタは同時に使用しませんでした。それはたくさんの意味があります。ありがとうございました! – Pabs123

1

たぶん、あなたは、このことによってあなたの条件を減らすことができる:

($('#priceText .salePrice') || $('#priceText strike')).text() 
+0

これは確かに私の現在のスニペットよりも優れています。理想的な解決策はまだ "条件付き"セレクタのいくつかの並べ替えが、私は実際に存在することは確信していない – Pabs123

関連する問題