6

これはかなり簡単な作業だと思いますが、Firefox for Mac 3.6.12 を使用すると、次のように動作しません。

// assign data attributes
$('.gallery li').each(function(i) {
    $(this).data('slide',i+1);
});

// outputting an empty jQuery object
console.log($('.gallery li[data-slide]'));

// this does not work either outputting an empty jQuery object
console.log($("[data-slide]"));

Firebug を使用すると、数値を含むすべてのデータ スライド属性がlis に正しく関連付けられ、ログアウトされていることがわかります。

$('.gallery li').each(function(index) {
  console.log($(this).data());
});

期待どおりの出力:

Object { slide=1}
Object { slide=2}
Object { slide=3}
Object { slide=4}

では、なぜ最初の方法が機能しconsole.logないのでしょうか。

4

1 に答える 1

9

data属性ではなく、jQuery の内部データ ホルダーにアイテムを追加しdata-ます。これらはjQuery の構造に読み込まdata()ますが、jQuery を使用して挿入された値は DOM にフィードバックされません。

これを模倣する最も簡単な方法は、次を使用すること.filter()です。

// To replicate $('.gallery li[data-slide]')
$('.gallery li').filter(function(){
    return (undefined !== $(this).data('slide'));
});

カスタム セレクターとしてこれを行うこともできます。

$.expr[':'].hasData = function(obj, index, meta, stack) {
    return (undefined !== $(obj).data(meta[3]));
};

$('.gallery li:hasData(slide)'); // li elements under .gallery with "slide" data set
$(':hasData(slide)'); // any element with "slide" data set
于 2010-11-16T20:10:13.983 に答える