使用正则表达式检查元素的类

时间:2014-09-25 19:40:08

标签: jquery regex find contains

如何使用jQuery我可以检查一个元素的类?

例如,在此代码中,我想获得cl_gry50类。

<span class="rate rate_cl_gry cl_gry50">
  <img src="img.png">
</span>

因此,有时候,我需要检查的课程可能是:

  • cl_gry10
  • cl_gry20
  • cl_gry30
  • cl_gry40
  • cl_gry50

我需要正则表达式吗? 感谢。

2 个答案:

答案 0 :(得分:2)

Sterling Archer的回答是一个好的开始,这是一个改进的版本:

$("span[class*='cl_gry']").filter(function() {
    return this.className.match(/(^|\W)cl_gry/);
});

这将使用选择器以获得更好的性能,并使用正则表达式来匹配不需要的匹配项。

使用此HTML进行测试:

<span class="something cl_gry50"></span>
<span class="cl_gry50"></span>
<span class="fake_cl_gry"></span>

将匹配前2个跨度,但不匹配第3个跨度。

如果你想要字符串“cl_gry50”,你可以像这样修改检查器:

var found = [];
$("span[class*='cl_gry']").filter(function() {
    var match = this.className.match(/((^|\W)cl_gry[^\W]+)/);
    if (!match) return false;
    found.push(match[0]);
    return true;
});
console.log(found); //Will contain ["cl_gry50", "cl_gry50"]

您可以使用indexOf过滤掉重复的内容,但这需要针对IE8进行polyfill。

答案 1 :(得分:0)

另一种给这只猫皮肤的方法

示例HTML

<span id='span1' class="rate rate_cl_gry cl_gry50">
</span>

<span id='span2' class="cl_gry50">
</span>

<span id='span3' class="rate rate_cl_gry">
</span>

<强> JS

    $.extend($.expr[":"], {
        cl_gryN: function(e)
        {
            var cl_gryN = false;
            $.each($(e).attr('class').split(" "), function(k, v) {

                if (/cl\_gry[\d]+/.test(v))
                {
                    cl_gryN = true;
                }
            });
            return cl_gryN;
        }
    });

console.log($('#span1').is(':cl_gryN')); //true
console.log($('#span2').is(':cl_gryN')); //true
console.log($('#span3').is(':cl_gryN')); //false