从jQuery对象获取值数组

时间:2011-04-05 10:07:15

标签: javascript jquery

我有以下对象:

$("input:checkbox:checked")
[
<input class=​"li_checker" type=​"checkbox" category_uid=​"1.3" category_language=​"da">​, 
<input class=​"li_checker" type=​"checkbox" category_uid=​"1.3.1" category_language=​"da">​
]

如果jQuery中有任何帮助器允许我为所有元素获取“category_uid”的值并将其作为另一个数组返回?预期结果:

["1.3", "1.3.1"]

6 个答案:

答案 0 :(得分:21)

使用map()

var myArray = $("input:checkbox:checked").map(function(){
  return this.getAttribute("category_uid");
}).get();

答案 1 :(得分:7)

正如bpierre建议的那样,使用.map()。他的回答是正确的。

如果您需要针对不同属性的此行为,您可能还可以编写为可重用的函数(“jQuery插件”):

jQuery.fn.pluck = function(attr) {
  return this.map(function() {
    return this.getAttribute(attr);
  }).get();
};

$('input:checkbox:checked').pluck('category_uid'); // ["1.3", "1.3.1"]

P.S。 category_uid不是HTML中的有效属性。请考虑使用自定义data-*属性,例如data-category-uid="foo"

答案 2 :(得分:5)

只是为了它的乐趣,第三种方式,这个方式使用attr

var categories = [];
$("input:checkbox:checked").attr("category_uid", function(index, value) {
    categories.push(value);
});

Live example


偏离主题:如果您想在HTML元素上拥有任意的自定义属性,建议使用HTML5(details)定义的data-前缀。您现在可以使用它,即使您没有使用HTML5文档类型(这是HTML5正在编写的地方之一 - 并且在当前的实践中控制它),并且它将来会有所改进。

答案 3 :(得分:1)

var myarray=[];
$("input:checkbox:checked").each(function () {
  myarray.push($(this).attr('category_uid'));
});

Live Demo

答案 4 :(得分:1)

这样的东西
var checked_cats = new Array();
$("input:checkbox:checked").each(function() {
   checked_cats.push($(this).attr('category_uid'));
});

(未经测试)

P.S。看到了你的推文。

答案 5 :(得分:0)

这是一种更“简单”的方法:

(function($){

    $.fn.getAttributes = function(attribute){
        var result = [];
        $(this).each(function(){
             var a = $(this).attr(attribute);
             if(a)
                 result.push(a);
        });
        return result;
    }
})(jQuery);

然后按如下方式使用它:

var result = $("input:checkbox:checked").getAttributes("category_uid");

没有测试过,但它应该可以正常工作。