2016-11-12 22 views
0

2つのクラスaとb、の順番でのすべての要素を選択したいとします。複数のクラスを持つ要素を順番に選択する方法

<element class="a b"> 

$( ".a + .b")を使用すると、どちらのクラスでもどちらの順序でも要素が取得されます。 class = "a b"ででない要素のみが必要です。 class = "b a"ではありません。私はjavascriptのgetElementsByClassNameを使用して同じ問題を抱えています。

注:注文を指定する理由は、ドキュメントの一部のdivがclass = "a b"で、一部に "b a"があることです。 。 。私は "a b"を持つものだけを選びたいと思う。文書はエレガントに構成されていませんが、それは私のコントロールではありません。これらの要素は、他のクラスを持っていない場合は

+0

クラスの順序はjQに影響しません私の知る限り、賢明なセレクター。 – Alvaro

+3

最初は何を注文するのですか? – charlietfl

+2

私はあなたが何を達成しようとしているのか分かりませんが、それを行うにはより良い方法がたくさんあるでしょう。クラスの* order *に応じて、有用ではなく、共通でもなく、全体的に意味をなさない。あなたの目標は何ですか?たぶん、私たちはそれをあなたのお手伝いができます。 –

答えて

1

、あなたは属性によってそれらを選択することができますがありまた、属性-開始-とだ、と-ends-とセレクタ、およびセレクタを属性は、含まれてい

$('[class="a b"]') 

、それは希望彼らは複数のクラス

$('[class*="a b"]') 

ノートを持っていた場合でも、要素を拾う:これも...class="what a bad idea"

にマッチします210

プレーンJSは属性セレクタをサポートしていますquerySelector[All]

しかし、これは悪い考えです。クラスの順序は関係ありません。何か間違っています。

0

アトリビュートリストは理想的にはある値に対してある値に優先度を与えるべきではありません。言い換えれば、注文は重要ではないと思われるので、ここでは疑わしいモデルがあるかもしれません。

しかし、あなたの質問に答えるには、正規表現のようなものが必要になるでしょう。

$('*').filter(function() { return /\ba\b.*\bb\b/.test(this.className); }); 

[編集]

とBの間に、他のクラスのいずれかのチャンスがあります場合、これはより寛容です。しかし、Adaneoの答えが示すとおり、それらの2つだけが存在することが確実であれば、属性セレクタを使用することができます。

0

他のクラスも、あなたがJSFiddle見ることができる。ここfilter()

$(".a.b").filter(function(){ 
    return this.className.indexOf('a b')>-1; 
}) 
0

を使用することができます関与している場合:https://jsfiddle.net/d002g7n8/1/

$('.a.b') 

    .filter(function(){ 

     return this.classList[0] == 'a' && this.classList[1] == 'b'; 

    }) 
    .addClass('selection'); 

我々は最初の要素を選択し、クラスを持っているものをフィルタリング「を初めは「b」、2位は「b」だった。

+0

これは動作しますが、不要な合併症であり、練習するべきではありません。 –

+1

ありがとう@BrandtSolovij。なぜそれが不要な合併症であるか私に説明できますか?変数に他の目的のためにすでに$( '.a.b')があったとしても、このようにフィルタリングするのは良い考えではありませんか? – Alvaro

+0

'class selection'と' class order 'の融合は、信頼性の低い不要な作業をしています。クラスが表示される順番は、ビューコンテキストの存続期間のどの時点でもクラスを追加/削除/読み込みできるので、依存するべきではありません。具体的な意図は、「物の存在」のような不変の概念に依存するべきである。達成しようとしているものに応じて、 'data []'や 'aria []'のCSSセレクタを使うことは、DOMの全体的な落ち着きにさらに有益であり、より具体的に活用されます –

0

セレクタ$( "。a +。B ")は、DOM内のクラスbと第二の要素のためです:

<element class="a"> 
<element class="b"> 

またはこの:

<element class="a b"> 
<element class="a b"> 

セレクタ+について:http://www.w3schools.com/cssreF/sel_element_pluss.asp

あなたの質問のためにあなたは、フィルタと、このセレクタを使用することができます:

$('.a.b').filter(function() { 
    return $(this).attr('class') == 'a b'; 
}) 
関連する問題