Javascript jQuery data()并不总是返回所有数据属性
我对jQuery(3.2.1).data()函数有一种奇怪的行为。 在某些场景中它从Javascript jQuery data()并不总是返回所有数据属性,javascript,jquery,dom,Javascript,Jquery,Dom,我对jQuery(3.2.1).data()函数有一种奇怪的行为。 在某些场景中它从input元素返回空的或不完整的对象,这些对象肯定有一些数据属性 我有异步工作的任意代码。也许它可以同时以某种方式改变输入元素。然而,本机函数dataset总是返回正确的结果。.data()并不总是这样 对于具有下一个运行时登录序列的检查: var input = $('#input_element'); // jQuery object console.log(input[0].attributes); //
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);
var输入=$('');//新元素
$.each(数据属性,函数(dName,值){
input.attr('data-'+dName,value);
});
替换为(输入);
我已经把这个问题作为调查发布了。也许有人会有同样的问题。或者知道什么可以改变.data()函数的行为。如果要用
.replaceWith()替换元素
对于具有data-*
属性的新元素,如果希望获得在新jQuery对象上设置的data-*
属性,而不是替换的元素oldElement
var oldElement=$(“输入”);
console.log(oldElement.data(),oldElement[0].outerHTML);
变量输入=$(“”);
var dataAttr=[“a”、“b”、“c”];
$.each(数据属性,函数(dName,值){
input.attr(“数据-”+dName,值);
});
替换为(输入);
console.log(input.data(),input[0].outerHTML)代码>
我们可以有更多的上下文吗?就像codepen中的一个例子一样?@Win-或者更好:这里使用堆栈片段(
)-请为元素内的数据提供一个@bigbounty,您必须使用val()方法“?data-*
属性如何与.val()
相关?如果使用jQuery.data()
然后使用.attr()
添加数据属性,则可能无法通过.data()
API看到添加的属性。很难说,因为你没有发布足够的代码。@mplungjan你为什么编辑OP的问题?让他们提供,或者不提供代码。data-test2
值无效JSON
,正如您在我的代码中看到的那样,我按$('')创建元素,而不是像您的示例中那样按$('')选择旧元素。是的,最后我引用了这个新的元素。@vatavale回答时的代码或更新问题时的代码有什么问题?如果您没有选择oldElement
,那么您仍然没有提供您在原始问题中所描述内容的最小、完整且可验证的示例。谢谢。它不能回答我的问题。Witch是“为什么在某些场景中(我无法在简单的示例中再现)。data()不返回所有数据属性”。大部分时间我的代码都在工作。我把这个问题作为调查发布。也许有人会有同样的问题。我肯定计划自己解决这个问题,然后发布答案。你没有复制你所描述的问题。我无法在简单的示例“为什么不?”中重现,但是,本机函数dataset始终返回正确的结果“然后使用.dataset
”。你为什么不在原始问题中包括所有与调查有关的细节?看见