迭代具有相似ID的元素

时间:2011-04-05 04:33:25

标签: javascript jquery

我希望在迭代期间获得单个id元素的<span>

示例场景:

我有一些idAAA开头,以BBB结尾。中间字符可以有所不同:

 <span id="AAA-LS-BBB">hi1</span>
 <span id="AAA-LAS-BBB">hi2</span>
 <span id="AAA-LBS-BBB">hi3</span>
 <span id="AAA--LCS--BBB">hi4</span>

此处,span id的前3位数字和span id的后3位数字相同...仅在中间它会有所不同。我想通用方法知道...每个id使用... $(“#id”)。attr(“id”) 所以在这里  我试图找出如下的迭代, 我想编写一个迭代器方法来获取当前的id

$("span[id^='AAA-***-BBB']").each(function(){
    var a = $("this").attr("id");
});

希望我的要求很清楚。 怎么ti在这里使用正则表达式...找出id?

3 个答案:

答案 0 :(得分:9)

使用.filter()结合正则表达式:

$('span[id]').filter(function () {
    return /^AAA.*BBB$/.test(this.id);
}).each(function () {
    alert(this.id);
});

或者,由于您已经使用.each(),因此您只需在其中添加if条件:

$('span[id]').each(function () {
    if (/^AAA.*BBB$/.test(this.id)) {
        alert(this.id);
    }
});

更新:看起来您也可以在同一属性上同时使用Attribute-Starts-WithAttribute-Ends-With选择器:

$('div[id^="AAA"][id$="BBB"]').each(function () {
    alert(this.id);
});

(参见示例:http://jsfiddle.net/2pz8X/

答案 1 :(得分:0)

结合其他贡献者的建议,并使正则表达式更具体:

// first, at least get all <div>'s with id's that start with 'AAA'
$("div[id^='AAA']").filter(function(){ 
    var regexp = /^A{3}(.*)B{3}$/; // regex
    return (this.id.match(regexp));
});

这将返回您需要定位的所有div。

示例@ http://jsfiddle.net/4ZNWJ/

答案 2 :(得分:-1)

试试这个:

$("span[id^='AAA']").each(function(){
  alert($(this).id);
});