是否有办法获取某个属性的所有唯一值。
e.g
<div class="bob" data-xyz="fish"></div>
<div class="bob" data-xyz="dog"></div>
<div class="bob" data-xyz="fish"></div>
<div class="bob" data-xyz="cat"></div>
<div class="bob" data-xyz="fish"></div>
我需要在div.bob上获取data-xyz属性的所有不同值,
所以它应该返回鱼,狗和猫。
答案 0 :(得分:6)
小代码:创建一个对象并制作'dog''fish''cat'属性。这将使他们与众不同。然后从对象中获取唯一的属性名称。简单易行:
var items = {};
$('div.bob').each(function() {
items[$(this).attr('data-xyz')] = true;
});
var result = new Array();
for(var i in items)
{
result.push(i);
}
alert(result);
答案 1 :(得分:3)
跟踪您已处理的值:
var seen = {};
var values = $('div.bob').map(function() {
var value = this.getAttribute('data-xyz');
// or $(this).attr('data-xyz');
// or $(this).data('xyz');
if(seen.hasOwnProperty(value)) return null;
seen[value] = true;
return value;
}).get();
参考: $.map()
当然,这仅适用于原始值。如果要映射到对象,则必须覆盖对象的toString()
方法,以便将它们用作键。
或者作为插件:
(function($) {
$.fn.map_unique = function(callback) {
var seen = {};
function cb() {
var value = callback.apply(this, arguments);
if(value === null || seen.hasOwnProperty(value)) {
return null;
}
seen[value] = true;
return value;
}
return this.map(cb);
});
}(jQuery));
答案 2 :(得分:2)
var array = $('div.bob').map(function() { return $(this).data('xyz'); });
这将返回所有值。然后你可以通过一个独特的功能运行它。
How do I make an array with unique elements (i.e. remove duplicates)?
function ArrNoDupe(a) {
var temp = {};
for (var i = 0; i < a.length; i++)
temp[a[i]] = true;
var r = [];
for (var k in temp)
r.push(k);
return r;
}
array = ArrNoDupe(array);