2011-06-20 9 views
0

私はオンザフライで(DOM文書の一部ではない)、HTMLコードを持っています。
jQueryオブジェクトのコンテキストでのjquery選択

<div class="media"> 
abc 
</div> 
<div class="media"> 
efg 
</div> 
<div class="nvid"> 
    <div class="media"> 
qwr 
    </div>  
</div> 

は、今私が使用して上記のhtmlのためのjQuery OBJを作るlike-何か、そして

jq = jQuery(above html); 

iはsyntax-

を使用して 'メディア' などのクラスを持つdiv要素を選択
jQuery('div.media', jq).each(console.log("found")); 


今、私は理想的には、3つの 'found'がコマンドラインに表示されるはずですが、私は1つしか得られません。どのアイデア、私は行方不明ですか?

+2

を持つ必要があります簡単にあなたのコードを読ん作るために提供されたコードの書式設定オプションを使用してください。 – Scottie

+1

-1私はそれをやったことがありますが、私はあなたが望んでいないと思う。質問を再確認し、正しくフォーマットしてください。 –

+1

ヘルプボックスから右手にまっすぐ:*インデントコードを4スペースで* –

答えて

1

を明確にするためを編集します。

core jQuery(selector, context)を使用しているシーンでは、.find()が実行されます。 docs on .find()を読むと、現在の要素の子を検索します。 - 0子供 - と.media 0の結果を探し

<div class="media">abc</div>の子供を取る:あなたの呼び出しは、次のことを行います意味

<div class="media">efg</div>さんの子供 - 0人の子供をとり、.media 0検索してください。

<div class="nvid">qwr</div>さんの子供 - 0人の子供をとり、.mediaの検索結果があります。

は、それをDOMの方法を行うのdivでラップして、検索を実行します。

var html = '<div class="media">abc</div>' + 
      '<div class="media">efg</div>' + 
      '<div class="nvid">qwr</div>'; 
var obj = $(html); 
//this fails: 
$('div.media',obj).each(function(){console.log("found with jquery object");}); 

// this works as a single DOM object 
var wrap = $('<div/>').append(obj).eq(0); 
$('div.media',wrap).each(function(){console.log("found with DOM object");}); 

私たちは子供のようにあなたのhtmlを挿入し、(親コンテナの検索を行うので、この作品の理由は、ラッパー)、それは3人の子供を得、それらの子供の2人に合っています。あなたがチェックアウトすることができ

$(html).filter('.media').each(function(){ 
    var myDiv = $(this); 
    // do stuff with myDiv.html(); 
}); 

:あなたのような何かを行うことができますあなたのコメントに基づいてlink to filter docs

obj.filter('.media').each(function(){console.log("found with Filter");}); 

:それをfilter()方法を行うと、ちょうどそれらの要素を持つ新しいjQueryオブジェクトを返すように

jsfiddle here - 少し古いです。

+0

しかし、私が得ていないのは、なぜこのような場合に失敗するのか、最初の解決策が明らかであることです。 – ghostCoder

+0

フィルターを使用できません。私は選択する必要があります。編集されたHTMLコードを参照してください。このために、私はクラスのメディアで3つのdivをすべて見つけ、innerHTMLで何かをする必要があります。 – ghostCoder

+0

物事をもう少し説明し、より多くのリンクを追加するように更新されました。 – WSkid

3

あなたは.each機能を渡す必要があり、それはDOMに添付されていないので、あなたは、この本の線に沿ってコードをより良くできます

jq.filter(function(){ return $(this).hasClass('media') }) 
    .each(function() { console.log("found"); }); 
+0

フィルターを使用できません。私は選択する必要があります。編集されたHTMLコードを参照してください。このために、私はクラスのメディアで3つのdivをすべて見つけ、innerHTMLで何かをする必要があります。 – ghostCoder

0

問題は、console.log()を呼び出す方法です。何も見つからなくてもすぐそこで評価され、評価されます。あなたは関数への参照を渡さない、あなただけ(「が見つかり」)ログを呼び出すため

あなたは

jQuery('div.media', jq).each(function() { console.log("found") }); 
+0

これは動作していません... :( – ghostCoder

+1

divタグにすべてのHTMLをラップすると、うまくいきます – TheBrain