如何使用jQuery获取不同的ID?

时间:2013-03-08 00:40:53

标签: jquery

我有以下jQuery代码,它读取与代码中显示的id匹配的网页的所有ID:

$('.tooltip[id*="_UI_A_"]').each(function(){
    console.log(this.getAttribute('id'));
});

运行此代码时,它会返回以下ID:

P2000_UI_A_5000_0
P2000_UI_A_5000_1
P2000_UI_A_5000_2
P2000_UI_A_5000_3
P2000_UI_A_5065
P2000_UI_A_5100

我的问题是,基于上面返回的ID,我不想返回任何“_0到_3”ID(这是一个放射性组),但只​​想返回不同的值,当涉及到这些ID。

所以我追求的数据实际上只是:

P2000_UI_A_5000
P2000_UI_A_5065
P2000_UI_A_5100

如何根据我原来的jQuery代码实现这个目标?

3 个答案:

答案 0 :(得分:2)

<强>更新

忽略之前的答案,因为它使用了.unique(),它只应用于DOM元素的数组(不是任何数组

改为使用此选项(再次使用split()slice()获取id 的正确部分)

var allIds = $('.tooltip[id*="_UI_A_"]').map(function () {
    return this.id.split('_').slice(0, 4).join('_');;
    }).get();

var uniqueIds = $.grep(allIds,function(v,k){
                return $.inArray(v,allIds) === k;
            });

uniqueIds变量按照它们在DOM中出现的顺序列出ID( fixed

要使用每个id,您可以使用数组上的任何循环或

$.each( uniqueIds, function(index, value){
  // do what you want with value 
  console.log(value);
});

原始答案使用了错误的功能) <击>

<击>

怎么样

$.unique( $('.tooltip[id*="_UI_A_"]').map(function(){
    return (this.id.split('_').slice(0,4).join('_');
}).get() );

代码使用$.unique()方法保持结果的唯一性,并且只保留每个字符串的前4个部分(部分由_分隔)使用split()slice()

答案 1 :(得分:0)

您可以使用:not选择器:

$('.tooltip[id*="_UI_A_"]:not(radio)').each(function(){
    console.log(this.getAttribute('id'));
});

我不完全确定这是有效的,但它比.map()

更清洁

答案 2 :(得分:0)

您可以使用.filter()

$('.tooltip[id*="_UI_A_"]').filter(function(){
    return this.id && this.id.match(/_UI_A_\d+$/);
});

这将为您提供一个jQuery对象,其中只包含所需的对象。显然,您可以调整正则表达式以包含或排除您想要的任何ID。如果您只想得到包含ID的字符串数组,那么您可以这样做:

var ids = [];
$('.tooltip[id*="_UI_A_"]').each(function(){
    if (this.id && this.id.match(/_UI_A_\d+$/)) {
        ids.push(this.id);
    }
});