选择选择器在特定元素类中找到的元素

时间:2013-04-21 10:19:34

标签: jquery

我有以下div标签结构,每个div标签都有多个类,如: -

<div>

     <div class="jsh-a_train_hotel_amsterdam info js-multiple"></div>

     <div class="jsh-info info js-multiple"></div>

     <div class="jsh-myinfo info js-single"></div>

</div>

现在我想找到类名以“jsh-”开头的div标签,而且以“jsh-”开头的类应该有一个子串“info”。

所以结果如下: -

<div class="jsh-info info js-multiple"></div>
<div class="jsh-myinfo info js-single"></div>

(原因:因为上面的2个div标签有类jsh-info和jsh-myinfo,它们满足元素类名称应该具有“jsh-”的条件,并且“jsh-”类名称值中的子字符串应该具有字符串“info”在其中)

2 个答案:

答案 0 :(得分:1)

试试这个

var elems = $('div[class^="jsh"]').filter(function(){
    return $(this).attr('class').match(/jsh[^ ]info/)
});

或者更好地使用以下内容jsh-info可以出现在class属性值

中的任何位置
var elems = $('div[class*="jsh"]').filter(function(){
    return $(this).attr('class').match(/\s*jsh[^ ]info/)
});

更新

您不需要在filter()内的元素上应用任何jquery函数,不需要将DOM元素转换为jQuery对象。所以你可以使用

return this.className.match(/\s*jsh[^ ]*info/)

而不是

return $(this).attr('class').match(/\s*jsh[^ ]info/)

更新2

如果您不想硬编码info并希望将其替换为变量,则可以执行以下操作

var theVar = 'info';
$('div[class*="jsh"]').filter(function () {
    return this.className.match(new RegExp('jsh[^ ]*' + theVar, 'gi'))
})

答案 1 :(得分:0)

尝试类似$('div[class^="jsh-"]').filter('div[class*="info"]')的内容,第一个选择器为start with,第二个选择器为contains