使用jquery的唯一属性值

时间:2011-09-04 09:16:56

标签: jquery

是否有办法获取某个属性的所有唯一值。

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属性的所有不同值,

所以它应该返回鱼,狗和猫。

3 个答案:

答案 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);

http://jsfiddle.net/GxxLj/1/

答案 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);