2011-09-20 6 views
0

せずにHTMLデータから、クラス名でdivを取得する私は、このようなHTMLデータを持っている:jQueryの:どのようにルート要素

<div class="class1">...</div> 
<div class="class1 class2">...</div> 
<div class="class3">...</div> 
... 
<div class="class1">...</div> 
<div class="class1 class2">...</div> 
<div class="class3">...</div> 

は、どのように私はクラス1でdivを取得することができ、その後、クラス2でのdiv?

私は、このような方法を試してみました:

var divs = $(data).find('.class1'); 

しかし、それは空の配列が返されました。

私は他の方法で試してみました:

var divs = $(data).filter('.class1'); 

をしかし、それはそう配列

[div.class1, div.class1, ..., div.class1]. 

を返された「クラス2」が失われたので、私は、その中の「クラス2」とdivを見つけることができませんでした...それはとても奇妙です...

誰か考えましたか? ありがとう!

+3

「データ」はどこから来ますか? –

+0

データを取得したら、何をしたいですか?ループしている? –

+0

動作するようです:http://jsfiddle.net/gilly3/NBPSS/。あるいは、私はあなたの問題を理解していないでしょう。あなたは明確にしていただけますか?またはあなたの問題を示すjsFiddleを投稿しますか? – gilly3

答えて

0

findが機能しなかった理由は、HTML文字列にルート要素がないため、各要素の内部で検索が行われるためです。含まれている要素の内部にHTMLをラップした場合、findが動作するはずです。

+0

ええ、私は知っています。 '$ j( '

').append(data).find( '。class1');'しかし、代わりの方法を知ることはもっと面白いです。 – greatromul

+0

私はこの方法が最も便利だと思います。さて、私はこの答えに投票します。 – greatromul

1

コレクションでfilterを呼び出すと、そのフィルタに一致する要素のみが取得されます。ただし、元のコレクションは変更されていません。

あなたがしなければならないのは、変数に元のコレクションを格納し、そしてあなたが.class2でフィルタしたいときに戻って参照してくださいです:

var all = $(data), 
    class1 = all.filter('.class1'), 
    class2 = all.filter('.class2'); 
1
$("div[class*='class1']"); 

テストするには、このコードを実行します。

var divs = $("div[class*='class1']"); 

divs.each(function() { 
    alert($(this).text()); 
}); 
+0

'div.class1'のみを含む配列を返しますが、 'div.class1 class2'は返しません。 – greatromul

+0

したがって、 'var divs = $(" div [class^= 'class1'] ");'を使用することは可能ですが、信頼できるスタイルではありません。 – greatromul

+0

var divs = $( "div [class * = 'class1']"); そのコードは機能します。 * =はclass1のclass属性内を検索します。元の投稿を編集して* = –