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已经完成了所有的样板文件