【问题标题】:How can I get the data-id attribute?如何获取 data-id 属性?
【发布时间】:2011-07-15 15:50:30
【问题描述】:

我正在使用 jQuery Quicksand 插件。我需要获取点击项的数据 ID 并将其传递给 Web 服务。

如何获取 data-id 属性?我正在使用.on() 方法重新绑定排序项目的点击事件。

$("#list li").on('click', function() {
  //  ret = DetailsView.GetProject($(this).attr("#data-id"), OnComplete, OnTimeOut, OnError);
  alert($(this).attr("#data-id"));
});
<script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>

<ul id="list" class="grid">
  <li data-id="id-40" class="win">
    <a id="ctl00_cphBody_ListView1_ctrl0_SelectButton" class="project" href="#">
      <img src="themes/clean/images/win.jpg" class="project-image" alt="get data-id" />
    </a>
  </li>
</ul>

【问题讨论】:

  • 新访客须知:JQuery 的 .live() 方法已被弃用,取而代之的是 .on()
  • 你应该从警报中删除#,你不需要它:-)
  • attr("#data-id")) 是错误的。更正:attr("data-id"));
  • @BruceAdams 可能值得编辑问题以使用on() 方法,因为live() 现在已弃用,而且这个问题吸引了很多访问者。

标签: javascript html jquery custom-data-attribute


【解决方案1】:

要获取属性data-id 的内容(如&lt;a data-id="123"&gt;link&lt;/a&gt;),您必须使用

$(this).attr("data-id") // will return the string "123"

.data()(如果您使用较新的 jQuery >= 1.4.3)

$(this).data("id") // will return the number 123

并且data-之后的部分必须是小写,例如data-idNum 不起作用,但 data-idnum 会。

【讨论】:

  • 这是为我返回“未定义”。
  • 对于那些报告它不起作用的人,请确保您的属性只包含小写字母。例如“data-listId”应该是“data-listid”。原因见stackoverflow.com/questions/10992984/…
  • 感谢您提及小写部分... 8 年后,这对我有所帮助。我犯了同样的骆驼套管错误。
【解决方案2】:

如果我们想使用现有的原生 JavaScript 检索或更新这些属性,那么我们可以使用 getAttribute 和 setAttribute 方法,如下所示:

通过 JavaScript

<div id='strawberry-plant' data-fruit='12'></div>

<script>
// 'Getting' data-attributes using getAttribute
var plant = document.getElementById('strawberry-plant');
var fruitCount = plant.getAttribute('data-fruit'); // fruitCount = '12'

// 'Setting' data-attributes using setAttribute
plant.setAttribute('data-fruit','7'); // Pesky birds
</script>

通过 jQuery

// Fetching data
var fruitCount = $(this).data('fruit');
OR 
// If you updated the value, you will need to use below code to fetch new value 
// otherwise above gives the old value which is intially set.
// And also above does not work in ***Firefox***, so use below code to fetch value
var fruitCount = $(this).attr('data-fruit');

// Assigning data
$(this).attr('data-fruit','7');

Read this documentation

【讨论】:

    【解决方案3】:

    我用$.data:

    //Set value 7 to data-id
    $.data(this, 'id', 7);
    
    //Get value from data-id
    alert( $(this).data("id") ); // => outputs 7
    

    【讨论】:

      【解决方案4】:

      如果您不担心旧的 Internet Explorer 浏览器,您也可以使用HTML5 dataset API

      HTML

      <div id="my-div" data-info="some info here" data-other-info="more info here">My Awesome Div</div>
      

      JavaScript

      var myDiv = document.querySelector('#my-div');
      
      myDiv.dataset.info // "some info here"
      myDiv.dataset.otherInfo // "more info here"
      

      演示:http://html5demos.com/dataset

      完整浏览器支持列表:http://caniuse.com/#feat=dataset

      【讨论】:

        【解决方案5】:
        var id = $(this).dataset.id
        

        为我工作!

        【讨论】:

          【解决方案6】:

          重要提示。请记住,如果您通过 JavaScript 动态调整 data- 属性,它将不会反映在 data() jQuery 函数中。您还必须通过data() 函数对其进行调整。

          <a data-id="123">link</a>
          

          JavaScript:

          $(this).data("id") // returns 123
          $(this).attr("data-id", "321"); //change the attribute
          $(this).data("id") // STILL returns 123!!!
          $(this).data("id", "321")
          $(this).data("id") // NOW we have 321
          

          【讨论】:

            【解决方案7】:

            HTML

            <span id="spanTest" data-value="50">test</span>
            

            JavaScript

            $(this).data().value;
            

            $("span#spanTest").data().value;
            

            回答:50

            【讨论】:

              【解决方案8】:

              你也可以使用:

              <select id="selectVehicle">
                  <option value="1" data-year="2011">Mazda</option>
                  <option value="2" data-year="2015">Honda</option>
                  <option value="3" data-year="2008">Mercedes</option>
                  <option value="4" data-year="2005">Toyota</option>
              </select>
              
              $("#selectVehicle").change(function () {
                  alert($(this).find(':selected').data("year"));
              });
              

              下面是工作示例:https://jsfiddle.net/ed5axgvk/1/

              【讨论】:

                【解决方案9】:

                使用自己的id 访问 data 属性对我来说有点容易。

                $("#Id").data("attribute");
                

                function myFunction(){
                  alert($("#button1").data("sample-id"));
                }
                <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
                
                <button type="button" id="button1" data-sample-id="gotcha!" onclick="myFunction()"> Clickhere </button>

                【讨论】:

                  【解决方案10】:

                  使用 jQuery:

                  $(".myClass").load(function() {
                    var myId = $(this).data("id");
                    $('.myClass').attr('id', myId);
                  });
                  

                  【讨论】:

                    【解决方案11】:

                    这段代码将返回数据属性的值。例如:data-id、data-time、data-name等

                    我已经为 id 展示了它:

                    <a href="#" id="click-demo" data-id="a1">Click</a>
                    

                    JavaScript:

                    $(this).data("id");
                    

                    获取data-id的值 -> a1

                    $(this).data("id", "a2");
                    

                    这将改变 data-id -> a2

                    $(this).data("id");
                    

                    获取data-id的值 -> a2

                    【讨论】:

                      【解决方案12】:

                      对于那些希望动态删除和重新启用工具提示的用户,您可以使用disposeenable 方法。请参阅.tooltip('dispose')

                      【讨论】:

                        【解决方案13】:

                        我有一个跨度。我想取属性data-txt-lang的值,这个值是用定义的。

                        $(document).ready(function ()
                        {
                            <span class="txt-lang-btn" data-txt-lang="en">EN</span>
                            alert($('.txt-lang-btn').attr('data-txt-lang'));
                        });
                        

                        【讨论】:

                          【解决方案14】:

                          问题是您没有指定下拉列表或列表的选项或选定选项,这是下拉列表的示例,我假设数据属性数据记录。

                          $('#select').on('change', function(){
                                  let element = $("#visiabletoID");
                                  element.val($(this).find(':selected').data('record'));
                              });
                          

                          【讨论】:

                            【解决方案15】:

                            试试

                            this.dataset.id
                            

                            $("#list li").on('click', function() {
                              alert( this.dataset.id );
                            });
                            <script src="https://code.jquery.com/jquery-3.3.1.slim.min.js"></script>
                            
                            <ul id="list" class="grid">
                              <li data-id="id-40" class="win">
                                <a id="ctl00_cphBody_ListView1_ctrl0_SelectButton" class="project" href="#">
                                  <img src="themes/clean/images/win.jpg" class="project-image" alt="get data-id >>CLICK ME<<" />
                                </a>
                              </li>
                            </ul>

                            【讨论】:

                              【解决方案16】:

                              纯js

                               let btn = document.querySelector('.your-btn-class');
                               btn.addEventListener('click',function(){
                               console.log(this.getAttribute('data-id'));
                               })
                              

                              【讨论】:

                              • 虽然这段代码 sn-p 可以解决问题,但它没有解释为什么或如何回答这个问题。请include an explanation for your code,因为这确实有助于提高您的帖子质量。请记住,您是在为将来的读者回答问题,而这些人可能不知道您提出代码建议的原因。
                              猜你喜欢
                              • 1970-01-01
                              • 1970-01-01
                              • 2020-12-27
                              • 1970-01-01
                              • 1970-01-01
                              • 2012-08-31
                              • 1970-01-01
                              • 2017-07-05
                              • 2021-11-14
                              相关资源
                              最近更新 更多