我有一个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()函数的行为。
答案 0 :(得分:1)
如果要使用.replaceWith()
替换具有data-*
属性的新元素,则应该引用替换元素input
,如果您希望获得data-*
属性您设置了新的jQuery对象,而不是替换的元素oldElement
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;