2017-07-28 337 views
2

1つのjquery文字列にcontainsを含む複数のセレクタでdivを検索できますか? ANDでないOR検索である必要があります。Jquery複数のセレクタと複数のcontains

$('.row .people:contains("James") .tags:contains("episode")') 

上記の選択は、下から最初のdivを返す必要があります。

<div class="row"> 
    <span class="people">James</span> 
    <span class="tags">episode</span> 
</div> 
<div class="row"> 
    <span class="people">Bill</span> 
    <span class="tags">episode</span> 
</div> 
<div class="row"> 
    <span class="people">James</span> 
    <span class="tags">podcast</span> 
</div> 
+0

'.people'と' .row'または何の '.tags'兄弟と子供はありますか?関連するHTMLを表示すると役立ちます。 – cjl750

+0

はいそうです。いくつかのhtmlを追加します –

+0

jQueryセレクタのターゲットdivが '.row'または' .tags'であるかどうか指定するのを忘れました。それは非常に重要です。 –

答えて

1

誰かが働いていた答えを投稿、しかし、それを削除しました。 "〜"チルダセレクタを使用すると、私は1つの文字列で選択を行うことができ、複数のセレクタを含む複数の文字列に基づいて文字列を構築できます。

$('.row .people:contains("James") ~ .tags:contains("episode")').parents('.row').addClass('highlighted');
.row.highlighted { 
 
    background-color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="row"> 
 
    <span class="people">James</span> 
 
    <span class="tags">episode</span> 
 
</div> 
 
<div class="row"> 
 
    <span class="people">Bill</span> 
 
    <span class="tags">episode</span> 
 
</div> 
 
<div class="row"> 
 
    <span class="people">James</span> 
 
    <span class="tags">podcast</span> 
 
</div>

2

あなたは、要素が特定の子孫が含まれているかどうかを確認するためにjQueryの.has()を使用することができます。 .has()ステートメント内に:containsをネストすることができます。

.rowにはspanが含まれているかどうかを確認することができます。

次に、.has()ステートメントを追加して、と一致するテキストを含むスパンを確認することができます。

.row:first-childを行うことができるので、あなたの説明の方法をチェックすることは過度に複雑になっていることに注意してください。実際にこのようにチェックする必要があると仮定した場合、これが行なわれます。

例:

$('.row').has('.people:contains("James")').has('.tags:contains("episode")').addClass('highlighted');
.row.highlighted { 
 
    background-color: red; 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="row"> 
 
    <span class="people">James</span> 
 
    <span class="tags">episode</span> 
 
</div> 
 
<div class="row"> 
 
    <span class="people">Bill</span> 
 
    <span class="tags">episode</span> 
 
</div> 
 
<div class="row"> 
 
    <span class="people">James</span> 
 
    <span class="tags">podcast</span> 
 
</div>

+0

これはうまくいきますが、私は1つの文字列でそれを望みました。誰かが早くコメントしましたが、 ".row .people:contains(" James ")〜.tags:contains(" episode ")"を使って答えを削除しました。チルダが働いた。これにより、動的検索を含む文字列を作成することが可能になりました –

+1

あなたが文字通りそのような1つの大きな長いフレーズを意味するのかどうかはわかりませんでした。ティルドの使用は賢いです。私の考えは、どちらの方法でもチェーン機能を使用できるセレクタがまだ1つありますが、実際のユースケースではバージョンが機能しない可能性があります。それにかかわらず、相手が自分の答えを削除したので、自分で投稿して自分の答えを受け入れてください。 – cjl750

+1

@JohnPollard P.S.あなたがしたら、私はアップヴォートするでしょう! :) – cjl750

0

あなたは、あなたが2つのセレクタ間にコンマが欠落している必要がありサンプルコードではしかし、jQueryの.has()関数を使用することができます。

があるべき.....

$('.row .people:contains("James"), .tags:contains("episode")'); 
+0

ANDで検索するのではなく、ORで検索します。 –

関連する問題