2011-08-10 10 views
2

は、私はこのコードを持っている、のは言わせて:jQueryオブジェクトには何が含まれていますか?

<ul> 
    <li><strong>list</strong> item 1 - 
    one strong tag</li> 
    <li><strong>list</strong> item <strong>2</strong> - 
    two <span>strong tags</span></li> 
    <li>list item 3</li> 
    <li>list item 4</li> 
    <li>list item 5</li> 
    <li>list item 6</li> 
</ul> 

<script> 
    var x = $("li"); 
    for (var k in x){ 
     alert(k + x[k]); 
    } 
</script> 

問題がある:アラートがあまりにも多くのものを出力します!どうして? なぜli要素だけを出力しないのですか? li要素はどこに格納されますか? jQueryメソッドが通常適用されるli要素のみを出力するにはどうすればよいですか?

+1

他に何がそれを出力しますか? http://jsfiddle.net/d5beA/ –

+0

jQueryのそれぞれを使って、あなたがやっていることは、コレクションのメンバー/メソッドを表示することです。 – Sleeperson

答えて

3

for...in構文を使用してもプロパティを使用すると、すべてのプロパティを取得する理由であるプロトタイプチェーンを通じて継承されたすべてを含むすべてのプロパティを、反復しますまた、マッチしたli要素のセットが表示されます。あなたは、通常のforループを使用している場合(または他の人が指摘しているように、jQueryのeach方法は)

、それは動作します:

var x = $("li"); 
for (var k = 0; k < x.length; k++){ 
    alert(k + x[k]); 
} 
+0

+1 'for ... in'は、配列や配列のようなオブジェクトを反復する**間違った方法です。 –

3

プロトタイプチェーン全体を警告します。 jQuery(javascript)の各関数を使ってli要素を繰り返し処理します。さらに、inはオブジェクトを反復処理するための適切な選択肢として提案されていません。

1

jQueryの「オブジェクト」には、のDOMノード参照が含まれているだけではありません。そのようにループすると(for..in)、オブジェクト上に直接存在し、プロトタイプチェーンを介して継承されるすべてのプロパティを取得します。それはDOMNODE参照だ上であなたは、単にループに非常に独自の.each()方法jQuerysを使用する必要があります。

x.each(function(index, node) { 
    console.log('Hi, I am at index ', index, ' and my reference is: ', node); 
}); 
1

jQueryのセレクタに一致するDOM要素の周りのオブジェクトをラップし、参照詳細はhttp://api.jquery.com/jQuery/をご覧ください。

アラートの内容は、そのオブジェクトの機能とプロパティです。

関連する問題