1

私は次のオブジェクトを持っています:

var r = {
    obj: $(this),
    children: $(this).children(),
    panes: $('.rotatorPane', $(this)),
    tagNames : [],
    captions: [],
    subcaptions: []     
};

$(this)次のdivを参照します。

<div class="myRotator">
    <div class="rotatorPane">

    </div>
    <div class="rotatorPane" id="pane3">

    </div>

    <img src="img/1.jpg" alt="pane 1" class="rotatorPane" data-caption="Lorem Ipsum" data-subcaption="Dolor sit amet" />

</div>

私が抱えている問題は、次のfor...inループにあります。

for(pane in r.panes){
    console.log(pane);
}

出力は期待どおりに開始されます。

0
1
2

しかし、出力として一連のメソッド名を取得します。

length
prevObject
context
selector
constructor
init
jquery
size
toArray
get
...etc

なぜこれが起こっているのか誰かが知っていますか?

4

2 に答える 2

8

for ... in配列または配列のようなものには使用しないでください。数値インデックス変数を使用します。

for (var i = 0; i < r.panes.length; ++i) {
  var pane = r.panes[i];
  // ...
}

このfor ... inフォームは、オブジェクトのプロパティ(すべて)を反復処理するためのものです。 配列のインデックス付きプロパティ(または、配列として扱っているもの)を反復処理する場合は、常に数値インデックスを使用します。

この場合、問題の配列のようなオブジェクトはjQueryオブジェクトであり、数値的にインデックス付けされたプロパティに加えて、あらゆる種類のプロパティがあります。

于 2012-04-04T19:08:04.803 に答える
1

jqueryが独自のメソッドやものをオブジェクトに追加するため、おそらくhasOwnPropertyを使用できないため、ループごとにjQueryを使用する必要があります。

于 2012-04-04T19:09:37.453 に答える