我的问题非常简单,并且似乎与在多种情况下设置或应用价值的情况一样频繁。
使用$(this)
如何使用单个元素获取多个属性,因为标题只是.attr()
。
$(this).attr('id', "checked") // Pseudo code
例如,用于存储在数组或变量中。谢谢。
答案 0 :(得分:1)
您使用的语法将值设置为属性。因此,你可以使用
注释中['id', 'checked'].map(a => $el.attr(a))
提到的lxe
之类的内容,或者您可以创建一个jQuery包装器attrs
,如下所示。
要获取checked
属性的值,您可以使用prop
,而不是attr
。
工作代码:
$(document).ready(function() {
$.fn.attrs = function() {
return Object.keys(arguments).map(k => $(this).prop(arguments[k]));
};
$('input[type="checkbox"]').click(function() {
globalCallback($(this).attrs('id', 'checked'));
});
});
function globalCallback(attrs) {
console.log(attrs);
}

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
Click the checkbox and see the console:
<br/>
<input type="checkbox" id="checkbox1" /> Checkbox 1
<input type="checkbox" id="checkbox2" /> Checkbox 2
<input type="checkbox" id="checkbox3" /> Checkbox 3
&#13;
答案 1 :(得分:0)
根据jQuery文档,你不能这样做:
获取匹配元素集中第一个元素的属性的值。
此外,您的$(this).attr('id', "checked")
代码会将id
属性设置为checked
值,因为attr
可用于设置具有此类语法的值。
但是,您可以创建一个辅助方法,如lxe
提到的方法答案 2 :(得分:0)
您可以使用Array#reduce
上的Element.attributes
获取属性来创建属性对象:
// get all elements attributes, and convert them to array
var attributes = [].slice.call($('#v-box').get(0).attributes, 0);
// reduce the array to key value pairs
var object = attributes.reduce(function(r, attr) {
r[attr.name] = attr.value;
return r;
}, {});
console.log(object);
&#13;
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<input id="v-box" type="checkbox" checked="checked">
&#13;
答案 3 :(得分:0)
您可以轻松扩展jQuery功能以适应您的需求。 如果您对扩展不感兴趣,可以创建一个新的函数/插件
以下是一个例子:
(function($)
{
var oldAttr = $.fn.attr;
$.fn.attr = function() {
var args= arguments[0];
if(Object.prototype.toString.call(args)=="[object Array]") {
return [args.map((e=> oldAttr.apply(this, [e])))];
//if you want to get a string you could just try `return args.map((e=> oldAttr.apply(this, [e])))`
}
return oldAttr.apply(this, arguments);
};
})(jQuery);