Javascript 为什么我找不到使用数据属性

Javascript 为什么我找不到使用数据属性,javascript,jquery,Javascript,Jquery,在代码中,我这样做: var markerName = $(fileInput).closest('tr.file-input-row').find('input[type="text"]')[0].value.replace(/[^a-z0-9]/gi, '-'); $.data(fileInput, 'for', markerName); 在本例中,markerName是“文件1” 如果我使用以下方式进行检查: $('input[type="file"][data-for="file-1"

在代码中,我这样做:

var markerName = $(fileInput).closest('tr.file-input-row').find('input[type="text"]')[0].value.replace(/[^a-z0-9]/gi, '-');
$.data(fileInput, 'for', markerName);
在本例中,
markerName
是“文件1”

如果我使用以下方式进行检查:

$('input[type="file"][data-for="file-1"]')
$('input[type="file"][data-for="file-1"]')
我得到一个
长度
等于
0
的对象。。。所以没有找到

但是,如果我这样做:

$('input[type="file"]:first').data().for
在这种情况下,第一个输入[type=“file”]与我为其设置数据属性的输入相同,我得到:

"file-1"
…正如所料

它看起来像是被设置的,但是它是不可访问的

你知道为什么吗


TIA

这不起作用,因为在代码的第一部分执行数据调整时,没有更新DOM对象。要更新DOM对象,应该使用attr(key,value)

关于数据和属性之间差异的更多信息,有一个很好的答案:

如果我使用以下方式进行检查:

$('input[type="file"][data-for="file-1"]')
$('input[type="file"][data-for="file-1"]')

.data()
jQuery.data()
都不是通过调用
$()
返回的对象的一部分。

元素是如何添加到页面的?什么是HTML?
$.data(fileInput,'for',markerName)不添加attribute@PhilOP没有询问
.data()
.attr()
@guest271314之间的区别。我最初使用$(element).data('for','xyz')设置数据属性,但它不起作用。这就是为什么我转而使用数据存储。虽然我不明白在数据存储中设置元素并没有添加属性,但现在我觉得很傻,因为它显然不会比搜索具有给定值的文本输入更好。同意:虽然这与另一个问题不同,这个问题确实提供了答案,我当然希望在从
jQuery()
调用返回的任何对象上都可以找到,即使是一个匹配的零元素;这是我们的一部分API@Phil虽然将
.data()
链接到
jQuery()
调用将检索附加到
jQuery()
对象的
.data()
,但不是作为
jQuery()
返回的对象的一部分。OP使用
jQuery.data()
,它不能链接到
jQuery()
调用。从这里的角度来看,OP希望查看作为返回的
jQuery()
对象的一部分设置的
$.data()
,这是一个合理的期望,尽管不是这样,至少在没有调整jQuery源代码或编写代码的情况下是如此。OP只使用
$.data
来查看。没有锁链之类的东西。我想你肯定应该再读一遍这个问题(以及OP最近的评论)@Phil你可能是对的。重新读取OP并找到“属性”。令人惊讶的是,问题中并没有出现HTML,尽管查询似乎是关于在HTML中设置属性的。OP可以完全从模式中省略
jQuery()
,并使用
HTMLElement.dataset
,以避免混淆。我试图“查找”特定的输入。虽然使用HTMLElement.dataset当然是可能的,但它更麻烦,因为jQuery已经完成了所有的样板文件