我使用map-function从几个li元素的rel-attributes中生成一个以逗号分隔的列表。
poiSelectedList = $('#poiList li li.selected').map(function() { return $(this).attr('rel'); }).get().join(',');
我怎样才能确保列表中没有重复内容?
答案 0 :(得分:2)
你可以像这样制作一个缓存:
var cache = [];
poiSelectedList = $('#poiList li li.selected').map(function() {
var rel = $(this).attr('rel');
if(cache.indexOf(rel) === -1) {
cache.push(rel);
return rel;
} else {
return undefined;
}
}).filter(function(a, b) {
return b !== undefined;
}).get().join(',');
或者,正如patrick dw建议的那样,更简洁的版本:
var cache = [];
$('#poiList li li.selected').each(function() {
var rel = $(this).attr('rel');
if(!$.inArray(rel, cache)) {
cache.push(rel);
}
});
var poiSelectedList = cache.join(); // defaults to ,
答案 1 :(得分:1)
你可以这样做:
var duplicates = {};
poiSelectedList = $('#poiList li li.selected').map(function() {
var rel = $(this).attr('rel');
if (duplicates[rel] !== true){
duplicates[rel] = true;
return rel;
}
}).get().join(',');
答案 2 :(得分:0)
虽然这不是短暂也不好看,但它应该是一种快速的方式
var poiSelectedList='';
var tmp;
$('#poiList li li.selected').each(function() { tmp[$(this).attr('rel')]=1; });
var comma=0;
for(var i in tmp) if (tmp.hasOwnProperty(i)){
if(comma){poiSelectedList+=','}else{comma=1}
poiSelectedList+=i;
}
答案 3 :(得分:0)
使用jQuery
var poiSelectedList = $('#poiList li li.selected').map(function() {
return $(this).attr('rel');});
$.unique(poiSelectedList);
poiSelectedList.get().join(',');