动态自定义属性未显示

时间:2014-04-30 10:38:09

标签: jquery dom element

我有以下代码是动态循环的一部分,并创建一个包含1列和4行的新网格。第四行有一个按钮:

var elem = $(this,'a[data-itemid]');
$(elem).prop('data-itemid', '"'+value+'"');
console.log($(elem).prop('data-itemid'));
console.log(elem);

使用开发者控制台,以下是绘制方式:

<a data-role="button" name="orderButton" dsid="orderButton" class="menuMaster_orderButton    ui-link ui-btn ui-btn-b ui-icon-none ui-btn-icon-nowhere ui-shadow ui-corner-all" id="menuMaster_orderButton" data-corners="true" data-icon="none" data-iconpos="nowhere" data-mini="false" data-theme="b" tabindex="7" role="button">Order!</a>

当它遍历每条记录时,我有上面的代码,它应该添加一个名为&#39; data-itemid&#39;的新属性。和一个价值。在这一行:

console.log($(elem).prop('data-itemid'));

它给了我正确的价值。所以我知道它添加了新属性。但是我不认为它会加入它,因为我根本找不到它。

console.log(elem);

这给了我:

[Window, jquery: "1.9.1", constructor: function, init: function, selector: "", size: function…]

哪个不是元素:(

更新

这是我在循环中使用的正在创建的按钮:

$(this,'a[name=orderButton]').data('itemid', value);

这是用于在onClick上获取它的内容:

console.log('itemid= '+$(this, 'a[name=orderButton]').data('itemid'));

以上回复未定义。

1 个答案:

答案 0 :(得分:1)

jQuery将所有data属性存储在内存中的对象中以提高性能。在加载DOM之后添加到元素的任何属性仅存储在此对象中,并且在HTML源中不可见。

您可以使用data验证是否已设置data()属性以进行检索。不要使用prop('data-x')attr('data-x');,因为由于上述原因,不保证属性存在,而且速度要慢得多。

考虑到这一点,你的第一个例子应该是:

var elem = $(this,'a[data-itemid]');
$(elem).data('itemid', value);
console.log($(elem).data('itemid'));
console.log(elem);