我的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!?
非常感谢任何帮助。
答案 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 ...
//
});
(或该主题的一些变化)。