0

我有以下 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 “ 在里面)

4

2 回答 2

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/)
});

更新

您不需要对里面的元素应用任何 jquery 函数,也不需要filter()将 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'))
})
于 2013-04-21T10:36:31.377 回答
0

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

于 2013-04-21T10:25:14.600 回答