복붙노트

[JQUERY] jQuery를 사용하여 요소의 모든 속성을

JQUERY

jQuery를 사용하여 요소의 모든 속성을

해결법


  1. 1.분실물은 그들 모두를 포함 속성 :

    분실물은 그들 모두를 포함 속성 :

    $(this).each(function() {
      $.each(this.attributes, function() {
        // this.attributes is not a plain object, but an array
        // of attribute nodes, which contain both the name and value
        if(this.specified) {
          console.log(this.name, this.value);
        }
      });
    });
    

    당신은 또한 당신이 .attr과 같이 호출 할 수 있도록 .attr 확장하고 무엇을 할 수 있는지 () 모든 속성의 일반 객체를 얻을 수 있습니다 :

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

    용법:

    var $div = $("<div data-a='1' id='b'>");
    $div.attr();  // { "data-a": "1", "id": "b" }
    

  2. 2.여기에 내 자신의 기준뿐만 아니라 당신을 위해, 할 수있는 많은 방법의 개요입니다 :) 기능은 속성 이름과 값의 해시를 반환합니다.

    여기에 내 자신의 기준뿐만 아니라 당신을 위해, 할 수있는 많은 방법의 개요입니다 :) 기능은 속성 이름과 값의 해시를 반환합니다.

    바닐라 JS :

    function getAttributes ( node ) {
        var i,
            attributeNodes = node.attributes,
            length = attributeNodes.length,
            attrs = {};
    
        for ( i = 0; i < length; i++ ) attrs[attributeNodes[i].name] = attributeNodes[i].value;
        return attrs;
    }
    

    Array.reduce 바닐라 JS

    (2011) ES 5.1을 지원하는 브라우저에서 작동합니다. IE9 +가 필요합니다, IE8에서 작동하지 않습니다.

    function getAttributes ( node ) {
        var attributeNodeArray = Array.prototype.slice.call( node.attributes );
    
        return attributeNodeArray.reduce( function ( attrs, attribute ) {
            attrs[attribute.name] = attribute.value;
            return attrs;
        }, {} );
    }
    

    jQuery를

    이 함수는 jQuery를 객체가 아닌 DOM 요소를 기대하고있다.

    function getAttributes ( $node ) {
        var attrs = {};
        $.each( $node[0].attributes, function ( index, attribute ) {
            attrs[attribute.name] = attribute.value;
        } );
    
        return attrs;
    }
    

    밑줄

    또한 lodash 작동합니다.

    function getAttributes ( node ) {
        return _.reduce( node.attributes, function ( attrs, attribute ) {
            attrs[attribute.name] = attribute.value;
            return attrs;
        }, {} );
    }
    

    LODS

    밑줄 버전보다 훨씬 더 간결이지만,뿐만 아니라 밑줄을 위해, lodash 작동합니다. IE9 +가 필요합니다, IE8의 버그입니다. 그 하나 @AlJey 했네.

    function getAttributes ( node ) {
        return _.transform( node.attributes, function ( attrs, attribute ) {
            attrs[attribute.name] = attribute.value;
        }, {} );
    }
    

    테스트 페이지

    JS 빈에서 이러한 모든 기능을 포함하는 라이브 테스트 페이지가있다. 시험은 부울 속성 (숨김) 및 열거 속성 (의 contentEditable = "")가 포함되어 있습니다.


  3. 3.LoDash 당신은 단순히이 작업을 수행 할 수 있습니다 :

    LoDash 당신은 단순히이 작업을 수행 할 수 있습니다 :

    _.transform(this.attributes, function (result, item) {
      item.specified && (result[item.name] = item.value);
    }, {});
    

  4. 4.디버깅 스크립트 (hashchange 이상 응답에 기초 JQuery와 용액)

    디버깅 스크립트 (hashchange 이상 응답에 기초 JQuery와 용액)

    function getAttributes ( $node ) {
          $.each( $node[0].attributes, function ( index, attribute ) {
          console.log(attribute.name+':'+attribute.value);
       } );
    }
    
    getAttributes($(this));  // find out what attributes are available
    

  5. 5.자바 스크립트 기능을 사용하여이 NamedArrayFormat의 요소의 모든 속성을 얻을 쉽습니다.

    자바 스크립트 기능을 사용하여이 NamedArrayFormat의 요소의 모든 속성을 얻을 쉽습니다.

    $ ( "# myTestDiv"). ((기능을 클릭) { . var에 바인드합니다 = document.getElementById를 ( "myTestDiv")는 속성; attrs에 ($ .each 함수 (I, ELEM) { .. $ ( "#의 바인드합니다") HTML ($ ( "#의 바인드합니다") HTML () + "로
    "+ elem.name + " "+ elem.value + "< / I> "); }); }); <스크립트 SRC = "https://ajax.googleapis.com/ajax/libs/jquery/1.11.0/jquery.min.js">

    이 버튼을 클릭하면
    속성이다


  6. 6.Underscore.js하여 간단한 솔루션

    Underscore.js하여 간단한 솔루션

    예를 들어 부모 클래스가의 모든 링크 텍스트를 가져 someClass

    _.pluck($('.someClass').find('a'), 'text');
    

    작업 바이올린


  7. 7.나의 제안:

    나의 제안:

    $.fn.attrs = function (fnc) {
        var obj = {};
        $.each(this[0].attributes, function() {
            if(this.name == 'value') return; // Avoid someone (optional)
            if(this.specified) obj[this.name] = this.value;
        });
        return obj;
    }
    

    VAR A = $ (엘) .attrs ();

  8. from https://stackoverflow.com/questions/14645806/get-all-attributes-of-an-element-using-jquery by cc-by-sa and MIT license