2011-01-26 22 views
2

いくつかのコンテンツをいくつかの異なるページに挿入するためにjQueryセレクターのセットを使用しています。しかし、いくつかのページには複数のセレクタがあるため、コンテンツはページに複数回挿入されます。たとえば:jQueryセレクター:排他的OR

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').before('<div>Hello World!</div>'); 

は、これらの一方のみが使用されるべきであると言うことは、排他的論理和でjQueryのセレクタの種類を使用することは可能ですか?どうもありがとう。

+0

はあなたが達成しようとしているものにビットを言えてもらえますか?正確な行動とは何か、あなたは何を期待していますか? – treeface

+0

彼のdivは1つ以上のクラスを持つことができるようですので、複数回選択することができます。 –

+0

はい、しかし、「これらのうちの1つのみを使用する」と言われると、最初のもの(「first()」を使用して見つけることができる)またはそのページに最も関連するもの、 – treeface

答えて

6

あなたは最初の1に見つかった要素のセットを減らすことができます。

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first') 
.first() 
.before('<div>Hello World!</div>'); 
+0

これは正確です。 +1 – Stephen

+0

これは、セレクタの順序がページの潜在的な順序と同じ場合にのみ機能します。 OPの場合、既存の要素の問題ではなく、既存の問題であるが、選択の目的には適用されない別の目的のために、さらに複雑である。 – user113716

+0

多くのおかげで、first()を使って私は後だったです。 – mrhahn

4

を表面では、あなたが最初に一致を得るためにfirst()(docs)メソッドを使用することができますように、それは思われます。

$('div.rColInnerL:first, div.box300.bdr.search:first, h2.blt13:first').first() 

もちろん、これは最初のものが常に正しいものに依存します。セレクタと一致する要素の使用には多少のバリエーションがあるように思われるため、問題になる可能性があります。

jQueryは、必ずしもセレクタの順ではなく、ページ上に表示される順番で要素を返すので、必ずしも排他的ORの振る舞いを再現するわけではありません。

より正確には、あなたがより明示的に何か必要があると思います:

var el = $('div.rColInnerL:first'); 
if(!el.length) { 
    el = $('div.box300.bdr.search:first'); 
    if(!el.length) { 
     el = $('h2.blt13:first'); 
    } 
} 

をここでセレクタの順序で要素を返さないのjQueryの例です:

<body> 
    <div id="first">first</div> 
    <div id="second">second</div> 
</body> 
alert($('#second, #first')[0].id); // alerts "first" instead of "second" 

#secondが最初の選択であっても最初の一致は#first要素として表示されます。なぜなら、最初に一致する要素がドキュメント内にあるからです。

例:http://jsfiddle.net/XxXXc/

+0

+1のドキュメントを参照してください。 – Stephen

+1

まあ...よくできました。 – Stephen