【问题标题】:Adding data attribute to DOM向 DOM 添加数据属性
【发布时间】:2013-02-02 19:38:02
【问题描述】:
$('div').data('info', 1);

alert($('div').data('info'));
//this works    

$('div[data-info="1"]').text('222');
//but this don't work

我正在 jquery 中创建元素。之后,我想添加属性“数据”。他喜欢并被添加,但在 DOM 中,这并不明显,我无法获取项目,使用

$('div[data-example="example"]').html()

jsfiddle

【问题讨论】:

    标签: jquery html custom-data-attribute


    【解决方案1】:

    从a中获取文本

    <option value="1" data-sigla="AC">Acre</option>
    
    uf = $("#selectestado option:selected").attr('data-sigla');
    

    【讨论】:

      【解决方案2】:

      jQuery 的 .data() 做了几件事,但它不会将数据作为属性添加到 DOM。当使用它来获取数据属性时,它所做的第一件事就是创建一个 jQuery 数据对象并将对象的值设置为数据属性。之后,它基本上与数据属性解耦了。

      例子:

      <div data-foo="bar"></div>
      

      如果您使用.data('foo') 获取属性的值,它将返回“bar”,如您所料。如果您随后使用.attr('data-foo', 'blah') 更改属性,然后使用.data('foo') 获取值,即使DOM 显示data-foo="blah",它也会返回“bar”。如果你使用.data()来设置值,它会改变jQuery对象中的值,而不是DOM中的值。

      基本上,.data() 用于设置或检查 jQuery 对象的数据值。如果您正在检查它并且它还没有,它会根据 DOM 中的数据属性创建值。 .attr() 用于设置或检查 DOM 元素的属性值,不会触及 jQuery 数据值。如果您需要同时更改它们,您应该同时使用.data().attr()。否则,坚持使用其中一个。

      【讨论】:

        【解决方案3】:

        在 Jquery 中“data”默认不刷新:

        alert($('#outer').html());
        var a = $('#mydiv').data('myval'); //getter
        $('#mydiv').data("myval","20"); //setter
        alert($('#outer').html());
        

        您将使用“attr”代替实时更新:

        alert($('#outer').html());
        var a = $('#mydiv').data('myval'); //getter
        $('#mydiv').attr("data-myval","20"); //setter
        alert($('#outer').html());
        

        【讨论】:

          【解决方案4】:

          使用.data() 只会将数据添加到该元素的jQuery 对象。为了将信息添加到元素本身,您需要使用 jQuery 的 .attr 或原生 .setAttribute 访问该元素

          $('div').attr('data-info', 1);
          $('div')[0].setAttribute('data-info',1);
          

          为了访问具有属性集的元素,您可以简单地根据您在帖子中注释的属性进行选择 ($('div[data-info="1"]')),但是当您使用 .data() 时,您不能.要根据.data() 设置进行选择,您需要使用jQuery 的过滤功能。

          jsFiddle Demo

          $('div').data('info', 1);
          //alert($('div').data('info'));//1
          
          $('div').filter(function(){
             return $(this).data('info') == 1; 
          }).text('222');
          <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
          <div>1</div>

          【讨论】:

          • 完美解决方案。即使使用 jQuery 的唯一选择器,如果你在 jQuery 选择器后面加上这个零,它也能很好地工作。非常感谢! $("#element")[0].setAttribute('data-info', 1);
          【解决方案5】:

          使用.data() 方法:

          $('div').data('info', '222');
          

          请注意,这不会创建实际的data-info 属性。如果需要创建属性,使用.attr():

          $('div').attr('data-info', '222');
          

          【讨论】:

          • @Luntegg:除非您确实有理由使用.attr(),否则请使用.data()
          • .data() 不起作用。它不会向 DOM 添加数据属性,我也不会通过数据属性获取元素..
          • 它也必须是一个字符串 - $('div').attr('data-info', ''+info.id)
          • 似乎 .data(key, val) 会创建 attr。有谁知道为什么没有?
          • Note that this doesn't create an actual data-info attribute. If you need to create the attribute, use .attr(): 这是我的问题的关键。非常感谢。
          【解决方案6】:
           $(document.createElement("img")).attr({
                          src: 'https://graph.facebook.com/'+friend.id+'/picture',
                          title: friend.name ,
                          'data-friend-id':friend.id,
                          'data-friend-name':friend.name
                      }).appendTo(divContainer);
          

          【讨论】:

          • 也许您可以解释一下您的代码中发生了什么,以帮助其他人。
          猜你喜欢
          • 2020-06-14
          • 1970-01-01
          • 1970-01-01
          • 2013-11-22
          • 1970-01-01
          • 2017-08-26
          • 2013-08-21
          • 1970-01-01
          • 2011-05-14
          相关资源
          最近更新 更多