为什么尝试读取数据属性在我的网站中返回undefined?

时间:2013-09-13 12:59:02

标签: jquery html

我在jsfiddle中尝试了这个并且它工作但是我无法在我的网站中使用数据属性。在这种情况下,我在警报中得到“未定义”:

<div data-test="something"></div>
<script>alert($('div').data('test'));</script>

这可能是什么原因?

4 个答案:

答案 0 :(得分:0)

在jsfiddle中你已经设置了dom。我认为你只需要复制脚本代码中的代码。

你遗漏了dom ready

<script>
$(document).ready(function(){
  alert($('div').data('test'));
});
</script>

答案 1 :(得分:0)

您的网站上有很多div,但此脚本仅提醒第一个div data-test

编辑:,即在DOM中找到的第一个

Fiddle

解决方案:为div添加data-test来自

的ID

答案 2 :(得分:0)

$('div')过于笼统的选择器。在只有一个元素的this fiddle中,您的代码运行正常。但是,在包含多个元素的this fiddle中,您的代码会失败:

<div></div>
<div data-test="something"></div>
<script>alert($('div').data('test'));</script>

$('div')选择页面上的每个<div>,但.data只获取jQuery集合中第一个元素的值

  

...在匹配元素集中的第一个元素的命名数据存储中返回值。

因此,您正在尝试获取集合中第一个元素的data-test属性,在上面的示例中,该属性没有这样的属性。您需要使选择器更具体,选择您想要的确切元素。你可以试试:

  • 在元素上使用id并使用$('div#someIdOnTheDiv')
  • 选择它
  • 不太优选,抓住具有{{​​1}}属性的任何<div>data-test

答案 3 :(得分:0)

您的网页中有很多div's.data()会提醒第一个div。因此,您有两种方法可以获取数据值。

  1. 使用父div类和警报值。
  2. $(document).ready(function(){
    alert($('div.entry-content').children().data('test'));
    });

    DEMO FIDDLE

    注意:我刚刚使用了您在网站中使用的父div类。

    1. 将一些idclass放入div并使用它来提醒数据值。
    2. <强> CODE:

      <div id="datatest" data-test="something"></div>
      
      $( document ).ready(function() {
          alert($('div#datatest').data('test'));
      });
      

      DEMO FIDDLE With ID