我有几个带有唯一ID的元素,如:
<div id='item-1-top'></div>
<div id='item-2-top'></div>
<div id='item-3-top'></div>
我希望以下内容可以使用jQuery:
$("#item-[.]+-top").each(function() {
$(this).hide();
});
我对正则表达式没有很好的掌握,我会很感激一些输入,因为上面的内容似乎不正确。
答案 0 :(得分:38)
如果你用正则表达式做这个,表达式就是:
item-\d-top
\d
表示任何单个数字(0..9),其他字符没有特殊含义(因此被视为文字)。
然而,jQuery目前没有正则表达式过滤器(只有像start / end / contains / etc这样的东西) - 所以你必须创建自己的(这是可能的,但如果你考虑到你应该停止并考虑你过滤的原因/原因,并确定是否有更好的方法。
更简单的是创建一个类(如serg555暗示),因为这正是你对这些项目的处理方式。
或者(如果您无法更改标记以添加课程),请使用现有的过滤器,展开g.d.d.c's answer,我可能会这样做:
$('div[id^=item-][id$=-top]').hide()
(因为您现在或将来可能有多个项目仅以'top'结尾,因此您需要更加具体,以避免无意中隐藏其他内容。)
答案 1 :(得分:13)
如果ID类似于news-top-1
,news-top-2
,news-top-3
,news-top-4
等,则选择器会帮助您。
http://api.jquery.com/attribute-starts-with-selector/
$.each( $("input[name^='news-top-']"), function () {
alert( $(this).hide() );
});
答案 2 :(得分:8)
我会为item
分配一些课程,然后通过此课程$(".item")
进行搜索。
答案 3 :(得分:4)
James Padolsey创造了一个精彩的filter,允许使用正则表达式进行选择。
jQuery.expr[':'].regex = function(elem, index, match) {
var matchParams = match[3].split(','),
validLabels = /^(data|css):/,
attr = {
method: matchParams[0].match(validLabels) ?
matchParams[0].split(':')[0] : 'attr',
property: matchParams.shift().replace(validLabels,'')
},
regexFlags = 'ig',
regex = new RegExp(matchParams.join('').replace(/^s+|s+$/g,''), regexFlags);
return regex.test(jQuery(elem)[attr.method](attr.property));
}
现在你可以使用
$('div:regex(id,item-[0-9]-top)').hide()
答案 4 :(得分:0)
遇到类似的问题并喜欢/ upvoted serg的创建类的答案,但后来因为我对这些元素进行了多次操作,Keyed Collections更适合。
答案 5 :(得分:-1)
[id^='startidText']
将匹配文本起始 id 中的 id。
[id$='endIdText']
将匹配文本结束 id 中的 id。
[id*='matchIdtext']
将匹配字符串中任何位置的 id。
看下面的帖子也有帮助,那是我学到的一点 neet 把戏 querySelector, wildcard element match?