2

我有以下 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 代码实现这一点?

4

3 回答 3

2

更新

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

改用它(再次使用split()andslice()来获得正确的部分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;
            });

该变量保存按它们在 DOM 中出现的顺序列出uniqueIds的 id(固定)

要使用每个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()

于 2013-03-08T00:47:05.547 回答
0

您可以使用:not选择器:

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

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

于 2013-03-08T00:47:54.983 回答
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);
    }
});
于 2013-03-08T01:23:48.380 回答