我在我的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 ...
//
});
(或该主题的一些变体)。