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 回答