4

セレクターからjqueryオブジェクトの配列を取得しようとしているので、後で変更するためにそれらを再度クエリする必要はありません。

しかし、コードでテストしていると、jqueryセレクターが特定の要素をクエリしない場合、配列をhtml要素として返すことがわかりました。

//HTML
<div id='nav'>
    <div class='menu'>menu 1</div>
    <div class='menu'>menu 2</div>
    <div class='menu'>menu 3</div>
    <div class='menu'>menu 4</div>
    <div class='menu'>menu 5</div>
</div>​


//JS

//this works
$('#nav .menu:eq(0)').html('haha');

//this does not    
$('#nav .menu').get(0).html('halo w');​ 

-> Uncaught TypeError: Object #<HTMLDivElement> has no method 'html'

私の質問は、なぜjqueryオブジェクトではなくhtml要素を返すのかということです。セレクターからjqueryオブジェクトの配列を取得するにはどうすればよいですか。

これがJSFiddleの例です。

http://jsfiddle.net/mochatony/K5fJu/7/

4

3 に答える 3

10

.get(i)DOM要素を返します。必要なのは次のいずれかです。

$('#nav .menu').first()
$('#nav .menu').eq(0)

可能なフィルター機能のリストについては、http://api.jquery.com/category/traversing/filtering/を参照してください。

于 2012-05-07T09:44:55.880 に答える
4

$('#nav .menu')一致した要素の配列を返します。ただし、これを使用するには、適切にアクセスする必要があります。次のコードを検討してください

var x = $('#nav .menu'); //returns the matching elements in an array

//(recreate jQuery object)
$(x[1]).html('Hello'); //you can access the various elements using x[0],x[1] etc.

上記はと同じです

$($('#nav .menu')[1]).html('Hello');​

実行するとalert(x.length)、例のように配列の長さを示すアラートとして5が表示されます。

JSFIDDLEの例

于 2012-05-07T12:03:01.873 に答える
1
$('#nav .menu:eq(0)');

また

$('#nav .menu:first');

また

$('#nav .menu').first();

また

$('#nav .menu').eq(0);
于 2012-05-07T09:47:30.797 に答える