我有以下对象:
$("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"]
答案 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);
});
偏离主题:如果您想在HTML元素上拥有任意的自定义属性,建议使用HTML5(details)定义的data-
前缀。您现在可以使用它,即使您没有使用HTML5文档类型(这是HTML5正在编写的地方之一 - 并且在当前的实践中控制它),并且它将来会有所改进。
答案 3 :(得分:1)
var myarray=[];
$("input:checkbox:checked").each(function () {
myarray.push($(this).attr('category_uid'));
});
答案 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");
没有测试过,但它应该可以正常工作。