我有以下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代码实现这个目标?
答案 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);
}
});