动态添加数据时,按数据属性选择JQuery选择器?

时间:2012-07-26 14:45:36

标签: javascript jquery

我有ul个项目。我使用jquery在页面加载后动态填充列表。当我添加每个列表项时,我还使用jquery“.data()”函数向该元素的数据添加“itemID”。像这样:

var item = $('<li>My Item Name</li>');
item.data('itemID', '123ABC456');

稍后,我需要一个选择器来确定我的项目列表中是否有任何具有特定itemID的项目。首先我尝试使用:

$('*[data-itemID="123ABC456"]');

这不起作用 - 在进一步研究中,我发现只有在加载页面时在DOM中设置了data属性时,此语法才有效。如果动态使用“.data”jquery方法,它将无效。

接下来我尝试了:

$(':data(itemID==123ABC456)');

出于某种原因,这不起作用。但是,如果我只运行$(':data(itemID)'),那么我获取所有在其数据中都有itemID的li元素。

我知道itemID属性设置正确,就像我在该列表项上调用.data()一样:

Object { itemID="123ABC456"}

如何在数据中选择itemID为“123ABC456”的所有元素?

3 个答案:

答案 0 :(得分:9)

http://jsfiddle.net/w28p9/1/&lt; - jsFiddle示例显示与data-attribute&amp;的差异jquery.data()

jQuery.data()与您尝试搜索的HTML5数据名称属性不同。

http://api.jquery.com/jQuery.data/

jQuery.data()保存在jquery元素内部(此数据隐藏在普通视线之外)。 如果在实际内部有[data-itemID]

,那么查找<li data-itemID="12345"></li>会有效

要检索并查找实际隐藏的.data()尝试:

// of course be more specific than just searching through all <li>'s
$('li').each(function () {
    if ( $(this).data('itemID') === '123ABC456' ) {
        // do whatever you wanted to do with it
    } 
});

希望有所帮助!

答案 1 :(得分:4)

而不是

$(item).data('itemID', '123ABC456')

使用

$(item).attr('data-itemID', '123ABC456')

然后你可以使用

$('[data-itemID=123ABC456]') 

作为选择器

答案 2 :(得分:0)

如何将itemID放在DOM中:

var item = $('<li itemID="'+itemid+">My Item Name</li>');