Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/464.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript jQuery data()并不总是返回所有数据属性_Javascript_Jquery_Dom - Fatal编程技术网

Javascript jQuery 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); //

我对jQuery(3.2.1).data()函数有一种奇怪的行为。 在某些场景中它从
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
”。你为什么不在原始问题中包括所有与调查有关的细节?看见