1

对,所以我正在尝试找出一种方法,我可以检查对象中的元素是否有特定的数据,然后在必要时将它们过滤掉。

我有一个简单的列表,我正在遍历所有列表项并将它们放入一个对象中。稍后我想运行并检查每个元素的数据ID。

<ul id="test">
    <li data-id="1">a</li>
    <li>b</li>
    <li>c</li>
    <li>d</li>
    <li>e</li>
    <li>f</li>
    <li>g</li>
    <li>h</li>
    <li data-id="2">i</li>
    <li>j</li>
    <li>k</li>
    <li>l</li>
    <li>m</li>
    <li>n</li>
</ul>`


var holder = {};
i = 0;
$('#test li').each(function(){
    holder[i]=$(this);
    i++
});
$('#test').append(holder[2]);
holder.each(function(){
    console.log($(this).attr('data-id'));

});

我敢肯定,你们中的一个聪明人将能够告诉我如何立即进行。这可能是非常明显的!

为帮助的家伙干杯。

4

2 回答 2

4

无需创建额外的对象,通过使用 jQuery 选择器选择元素,您就有了一个对象。

var $holder = $('#test li');

$holder.each(function(){
     console.log($(this).data('id'));
     // console.log(this.dataset.id);
})

如果要选择具有 data-id 属性的 li 元素,可以使用属性选择器:

var $holder = $('#test li[data-id]');

对于存储值,您可以使用map方法:

var data = $('#test li[data-id]').map(function(){
                return this.dataset.id;
           }).get() // [1, 2]
于 2012-10-02T14:09:13.547 回答
0

您有一个简单的数组,其中包含项目列表,而不是 jQuery 对象:

holder.each(function(){
    console.log($(this).attr('data-id'));

});

如果您想遍历此类数组的项目,您应该使用:

$.each(holder, function(){
    console.log($(this).attr('data-id'));

});​

但是从你的代码中你不需要那个。您可以执行以下操作:

$('#test li').each(function(){
    console.log($(this).attr('data-id'));
});
$('#test').append($('#test li').eq(2));
于 2012-10-02T14:13:33.107 回答