我在我的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中不起作用!

任何帮助将不胜感激。

最佳答案

使用显式过滤器可能会更快一些:

 $("*").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将在“data-foo”属性中获取内容:
  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 ...
    //
  });

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

10-07 18:03