多个类的jquery选择器

时间:2011-06-08 15:30:38

标签: javascript jquery regex selector

我的DOM中的元素有class =“LiveVal:variablepart”,我想编写一个JQuery选择器,即使元素在上面的tom上有其他类也可以工作。例如。 class =“header LiveVal:varablepart”或class =“LiveVal:varablepart header”。

如果LiveVal是第一个使用:

的课程,那对我有用
$('[class^=LiveVal:]').each(function ( intIndex ) { somefunction });

但很明显,如果另一个班级在LiveVal之前。

在函数中我需要提取变量部分。我打算这样做:

theclass = $( this ).attr('class');
varpart = theclass.replace('\bLiveVal:(.+?)[\s]', '$1');

..但是,唉,它不匹配。我已经在http://gskinner.com/RegExr/上测试了正则表达式,它似乎有用,但它不适用于javascript!?

非常感谢任何帮助。

2 个答案:

答案 0 :(得分:5)

这将检查类名是否包含'LiveVal:'

$('[class*=LiveVal:]').each(function ( intIndex ) { somefunction });

修改 没有意识到你有这个要求(虽然是一个好的)。您可以改为:$('[class^="LiveVal:"], [class*=" LiveVal:"]')

这是一个小提琴:http://jsfiddle.net/wY8Mh/

答案 1 :(得分:1)

使用显式过滤器执行此操作可能会更快一些:

 $("*").filter(function() { return /\bLiveVal:/.test(this.className); }).something();

这取决于本机“querySelectorAll”是否完成工作,并且快速完成。这也可以避免“FooLiveVal”问题。

值得注意的是,在HTML5世界中,最好使用“data-LiveVal”属性在元素上存储“变量部分”信息。然后你可以说:

$('[data-LiveVal]').something();

在HTML中,它看起来像这样:

<div class='whatever' data-LiveVal='variable part'>

从版本1.5开始,当您将属性的尾部(“data-”之后的部分)传递给“.data()”时,jQuery将获取内容。 “方法:

  var variablePart = $(this).data('LiveVal');

“.data()”方法,但是,当您存储新的“变量部分”时,更新“data-foo”属性。

编辑 - 如果你想要在你的属性名称前缀(“LivaVal:”)之后填入类中的,你可以像这样提取它:

  var rLiveVal = /\bLiveVal:(\S*)\b/;
  $('*').filter(function() { return rLiveVal.test(this.className); }).each(function() {
    var variablePart = rLiveVal.exec(this.className)[1];
    //
    // ... do something ...
    //
  });

(或该主题的一些变化)。