JQuery字符串匹配

时间:2014-12-25 22:36:10

标签: jquery match

我想匹配某些属性。为什么它不匹配此代码中的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);
    }
});

1 个答案:

答案 0 :(得分:2)

问题是属性data-super-11未被识别为 data 属性,因为短划线-之后的数字字符不符合名称要求。

来自The algorithm for getting the list of name-value pairs(数据属性):

  
      
  1. 对于列表中的每个名称,对于名称后跟小写ASCII字母的每个U + 002D HYPHEN-MINUS字符( - ),删除U + 002D HYPHEN-MINUS字符( - )并替换字符跟着它转换为ASCII大写的相同字符。
  2.   

但是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可以在连字符后用数字读取数据属性。