0
var collection = $('ul li');
collection.each(function (index) {
    var test = $.extend($(this), {
    // var test = $.extend(collection.eq(index), {
        someProperty: 'val'
    });
    console.log(test.someProperty);
});
console.log(collection.eq(0).someProperty);

そしてテスト: http://jsfiddle.net/simo/G3yCr/1/

jquery コレクション内の各オブジェクトを拡張しようとしています。コレクション内の各アイテムから直接プロパティにアクセスしたい。

collection.eq(index)問題は、オブジェクトが拡張されない理由です。コメント行は代替であり、同じ結果が得られます。

仕様: http://api.jquery.com/jQuery.extend/

4

2 に答える 2

0

.each関数thisでは、jQuery オブジェクトではなく、コレクションの個々の DOM 要素を参照しています。

次に呼び出すと、新しいjQuery オブジェクト$(this)を作成していますが、それはコレクションのものではありません。

この追加のプロパティを永続化する最も簡単な方法は、要素自体に追加することです。.data()または、追加のプロパティを保存および取得するために使用します。

ES5 ブラウザーでは、(おそらく厄介な) ハックを使用して、.data()不動産のように見せることができます。

(function($) {
    Object.defineProperty($.fn, 'foo', {
        get: function() {
            return $(this).data('foo');
        },
        set: function(v) {
            $(this).data('foo', v);
        }
    });
})(jQuery);

$('#d1').foo = 'bar';
$('#d2').foo = 'wot';

alert([$('#d1').foo, $('#d2').foo]);

(AFAIK)他のjQueryコードはプロパティを追加しないことに注意してください(.length)jQueryオブジェクト以外。このトリックを使用すると、他の開発者が混乱する可能性があります。

于 2012-08-25T22:12:35.250 に答える
0

単純。jQuery Plugin Authoringを読んでください。

$.fn.someProperty = 'val';
var collection = $('ul li');
console.log(collection.eq(0).someProperty);​

コレクション全体を反復処理する必要はありません。

于 2012-08-25T22:19:03.693 に答える