使用.attr()获取多个属性以获得" id"和":已检查"来自元素使用"这个" | jQuery的

时间:2017-01-05 23:14:03

标签: javascript jquery

我的问题非常简单,并且似乎与在多种情况下设置或应用价值的情况一样频繁。

使用$(this)如何使用单个元素获取多个属性,因为标题只是.attr()

$(this).attr('id', "checked") // Pseudo code

例如,用于存储在数组或变量中。谢谢。

4 个答案:

答案 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;
&#13;
&#13;

答案 1 :(得分:0)

根据jQuery文档,你不能这样做:

  

获取匹配元素集中第一个元素的属性的值。

此外,您的$(this).attr('id', "checked")代码会将id属性设置为checked值,因为attr可用于设置具有此类语法的值。

但是,您可以创建一个辅助方法,如lxe

提到的方法

答案 2 :(得分:0)

您可以使用Array#reduce上的Element.attributes获取属性来创建属性对象:

&#13;
&#13;
// 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;
&#13;
&#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);

演示https://jsfiddle.net/eztukwj9/