从jQuery对象获取值数组

Getting array of values from jQuery object

本文关键字:数组 获取 对象 jQuery      更新时间:2023-09-26

我有以下对象:

$("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"]

使用map():

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

按照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"

只是为了好玩,第三种方式,这一种使用attr:

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

实例


主题外:如果您希望在HTML元素上具有任意的自定义属性,建议使用HTML5定义的data-前缀(详细信息(。您现在可以使用它,即使您没有使用HTML5 doctype(这是HTML5只是对当前实践进行编码和控制的地方之一(,它也会在未来得到验证。

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

实时演示

类似的东西

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

(未测试(

p.s.看到了你的推特。

这里有一种更"插件化"的方法:

(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");

还没有测试过,但应该还可以。