我想匹配某些属性。为什么它不匹配此代码中的data-super-11?我如何确保它有效?我将永远有这样的形式:data-super-'跟随第三个'字。
var d = '<div data-super-high="a" data-super="b" data-super-11="c" />';
$.each($(d).data(), function (i, e) {
if(/super/.test(i)){
console.log('name='+ i + ' value=' +e);
}
});
答案 0 :(得分:2)
问题是属性data-super-11
未被识别为 data 属性,因为短划线-
之后的数字字符不符合名称要求。
来自The algorithm for getting the list of name-value pairs
(数据属性):
- 对于列表中的每个名称,对于名称后跟小写ASCII字母的每个U + 002D HYPHEN-MINUS字符( - ),删除U + 002D HYPHEN-MINUS字符( - )并替换字符跟着它转换为ASCII大写的相同字符。
醇>
但是data-super-11
仍然是普通属性(不是数据),所以你可以使用attributes
集合来读取它:
var d = '<div data-super-high="a" data-super="b" data-super-11="c" />';
$.each($(d)[0].attributes, function (i, e) {
if (/super/.test(e.name)) {
document.body.innerHTML += 'name='+ e.name + ' value=' + e.value + '<br>';
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
注意,要仅匹配数据属性,请添加支票e.name.indexOf('data-') == 0
。
<强> UPD 即可。感谢adeneo的评论,他们发现使用数据集API可以在连字符后用数字读取数据属性。