代码之家  ›  专栏  ›  技术社区  ›  Mircea

jQuery/Javascript从一个元素获取所有属性并将其传递给另一个元素

  •  0
  • Mircea  · 技术社区  · 16 年前

    我有以下代码:

    <div id="elm0" data-color="color" data-size="size" data-more="more">something</div>
    <div id="elm1">This element must get elem0 attr</div>
    

    将其转换为$(“#elm1”)

    我该怎么做? 桑克斯

    编辑:我只需要获取HTML5数据属性,如data color=“color”,data size=“size”,而不是class,ID,style。。。

    3 回复  |  直到 16 年前
        1
  •  1
  •   Nick Craver    16 年前

    您可以在vanilla JavaScript中执行以下操作:

    var elm0a = document.getElementById("elm0"​​​​​​​​​​​​).attributes,
        elm1 = document.getElementById("elm1");
    for(var i=0; i<elm0a.length; i++) {
        var a = elm0a[i];
        if(a.name.indexOf("data-") == 0)
            elm1.setAttribute(a.name, a.value);
    }​
    

    You can give it a try here

    jQuery.fn.copyDataAttrTo = function(selector) {
      var a = this[0].attributes, attrMap = {};
      for(var i=0; i<a.length; i++) {
         if(a[i].name.indexOf("data-") == 0) attrMap[a[i].name] = a[i].value;
      }
      $(selector).attr(attrMap);
      return this;
    };
    

    你可以这样称呼它:

    $("#elm0").copyDataAttrTo("#elm1");
    

    You can test that version here

        2
  •  1
  •   jAndy    16 年前

    这样就可以了。不用jQuery也可以轻松完成。

    $(function(){
        var src = $('#elm0'),
            dst = $('#elm1'),
            attr = src[0].attributes;
    
        for(var i = 0, len = attr.length; i < len; i++){
            var current = attr[i];
            dst.attr(current[i].nodeName, current[i].nodeValue);
        }
    });​
    

    http://www.jsfiddle.net/pnCdK/

        3
  •  1
  •   Matt user129975    16 年前
    jQuery.fn.getDataMap = function () {
      var map = {};
    
      if (!this.length) {
        return map;
      }
    
      var attributes = this[0].attributes;
    
      for (var i=0;i<attributes.length;i++) {
        var curr = attributes[i];
    
        if (curr.nodeName.indexOf("data-") === 0) {
          map[curr.nodeName] = curr.nodeValue;
        }
      }
    
      return map;
    }
    

    $('#elm1').attr($('#elm0').getDataMap());
    

    http://www.jsfiddle.net/Ag5Dv/