在jQuery选择器上使用regex查找基于id的所有元素

时间:2010-06-21 16:40:37

标签: jquery regex jquery-selectors

我有几个带有唯一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();
});

我对正则表达式没有很好的掌握,我会很感激一些输入,因为上面的内容似乎不正确。

6 个答案:

答案 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-1news-top-2news-top-3news-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?