我可以获得所有以" on"开头的属性。用jquery?

时间:2016-05-01 21:11:15

标签: javascript jquery

我正在寻找一种方法来获取以" on"开头的元素的所有属性。使用jQuery或Vanilla JS。我目前正在获取所有属性,然后使用@primvdb在此帖子上提出的方法循环遍历它们以获取我想要的属性:Get all attributes of an element using jQuery

我的代码如下所示:



/* Expanding .attr as proposed by @primvdb */
(function(old) {
  $.fn.attr = function() {
    if(arguments.length === 0) {
      if(this.length === 0) {
        return null;
      }

      var obj = {};
      $.each(this[0].attributes, function() {
        if(this.specified) {
          obj[this.name] = this.value;
        }
      });
      return obj;
    }

    return old.apply(this, arguments);
  };
})($.fn.attr);

/* And then my function */
$.fn.attrThatBeginWith = function(begins){
  var attributes = this.attr();
  var attrThatBegin = {};
  for(var attr in attributes){
    if(attr.indexOf(begins)==0){
      attrThatBegin[attr] = attributes[attr];  
    }
  }
  return attrThatBegin;
};

/* Usage */
var onAttributes = $("#MyElement").attrThatBeginWith("on");




这种方法很有效,但非常“肮脏”#34;它看起来像jQuery的所有广泛功能,应该有一个更好的"更清洁"这样做的方式。有人有什么建议吗?

1 个答案:

答案 0 :(得分:4)

您可以使用element.attributes获取附加到元素的所有属性 可以将本机属性对象转换为数组,然后根据给定的字符串进行过滤。

执行上述操作的插件看起来像

$.fn.attrThatBeginWith = function(begins){
    return [].slice.call(this.get(0).attributes).filter(function(attr) {
        return attr && attr.name && attr.name.indexOf(begins) === 0
    });
};

FIDDLE