获取数据 = 值的所有元素

Get all elements with data = value

本文关键字:元素 数据 获取      更新时间:2023-09-26

我的JavaScript类中有这个问题:

//===== i set this data record
jQuery(element).data("types", "row");
console.log(jQuery(element).data("types")); // writes "row" (the element is a div)
//==== into other method
//==== i want find all element with data-types = row
console.log(jQuery("[data-types='row']").length); // writes 0
jQuery("div").each(function(i,e){
    console.log(i, jQuery(e).data(), jQuery(e).attr("id")); // writes object{type:row}
});

为什么用这个jQuery("[数据类型='row']")我找不到元素???

使用

jQuery.data() 将数据分配给元素时,它不会更新元素的 data-* 属性;因此不能使用属性选择器来选择元素。

数据属性在

第一次数据属性被拉取时 已访问,然后不再访问或更改(所有数据值 然后存储在jQuery内部)。

为了选择这些元素,您可以将filter()函数与自定义函数一起使用:

jQuery("div").filter(function() {
    return $(this).data("types") === "row";
});

注意:如果您还使用 jQuery UI,您会发现:data(key)选择器很有用。

data() 方法仅在最初从元素读取时使用 DOM。当您使用它来添加或更改元素的数据时,它会将数据放入其内部存储器中,而不会修改 DOM。所以 DOM 选择器不会找到它。从文档中:

data-属性在第一次访问数据属性时被拉取,然后不再被访问或改变(然后所有数据值都存储在jQuery内部)。

要查找所有元素,您可以使用.filter()

jQuery("div").filter(function() {
    return $(this).data("types") == "row";
});