jQuery data()并不总是返回所有data-attrbutes

时间:2017-07-23 14:11:04

标签: javascript jquery dom

我有一个jQuery(3.2.1).data()函数的奇怪行为。 在某种情况中,它会从input元素返回空的或不完整的对象,这些对象肯定具有一些数据属性。

我有任意代码,它正在异步工作。也许它可以同时以某种方式改变input元素。但是,本机函数dataset始终返回正确的结果。 .data()并不总是。

对于具有下一个登录运行时序列的检查:

var input = $('#input_element');  // jQuery object
console.log(input[0].attributes); // it shows data-attributes presented at the moment
console.log(input.data());       // jQuery .data() returns nothing or half of attributes
console.log(input[0].dataset);   // native function return array of all data-attributes

我尝试使用.removeData()功能但没有成功。

在此之前我创建了输入元素并从数组中添加了属性。并用这个新元素替换旧元素。

var input = $('<input id="input_element" />'); // new element
$.each(dataAttr, function (dName, value) {
   input.attr('data-' + dName, value);
});
oldElement.replaceWith(input);

我已将此问题作为调查发布。也许有人会有同样的问题。或者知道什么可以改变.data()函数的行为。

1 个答案:

答案 0 :(得分:1)

如果要使用.replaceWith()替换具有data-*属性的新元素,则应该引用替换元素input,如果您希望获得data-*属性您设置了新的jQuery对象,而不是替换的元素oldElement

&#13;
&#13;
var oldElement = $("input");
console.log(oldElement.data(), oldElement[0].outerHTML);
var input = $("<input />");
var dataAttr = ["a", "b", "c"];
$.each(dataAttr, function (dName, value) {
   input.attr("data-" + dName, value);
});
oldElement.replaceWith(input);
console.log(input.data(), input[0].outerHTML);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js">
</script>
<input type="text">
&#13;
&#13;
&#13;