15

我想了解更多关于在 HTML 中使用 data-* 属性及其在 jQuery 中的使用。我只是尝试使用 .data() 和或 .attr()检索 data-attribute-name="a value"两者都使用以下方法记录为“未定义”。如何使用 data- 属性通过 jQuery 传递值?

HTML

<li class="als-item">
    <a data-loc-subject="test value">
        <img src="clock.png"/>
    </a>Beach
</li>

JS

$( ".als-item" ).click(function(e) {
e.preventDefault();

var data = $('.als-item').data('data-loc-subject');
var attrmethod = $('.als-item').attr('data-loc-subject');
    console.log(data);
    console.log(attrmethod);
});

jsFiddle

4

4 回答 4

29

您不需要在数据名称前面加上data.

$( ".als-item > a" ).click(function(e) {
    e.preventDefault();

    var data = $('.als-item').data('loc-subject');
    var attrmethod = $('.als-item').attr('data-loc-subject');
        console.log(data);
        console.log(attrmethod);
});

http://jsfiddle.net/thinkingmedia/c6kYT/

两者的区别

您可以使用数据属性将数据值硬编码到 DOM 中。例如;

<a href="#" data-john="smith">Something</a>
console.log($("a").data("john"));
// will output "smith"

之所以有效,是因为 jQuery 对待数据的方式与对待属性的方式不同。它将首先检查 DOM 元素是否包含名为 的属性data-john,以及是否返回该值。如果它不包含该属性,它将查看附加到 DOM 元素的内部数据。如果该数据存在,它将返回该值。

当您使用 jQuery 设置数据时,它不会更新 DOM 元素的属性。它将数据附加到内部的 DOM 元素。因此$("a").data("house","on fire");会将字符串“on fire”存储在标签“house”下的 DOM 元素中。如果您使用 DOM 检查器查看 HTML。不会有新属性分配给该元素,称为data-house.

这与使用jQuery.attr()方法不同。直接修改一个 DOM 元素的属性。

编辑: 需要注意的是,为了访问某些 HTML 元素的数据属性,您必须通过某些选择器(id、class 等)选择元素。您不能将“this”传递给元素上的任何方法属性并使用该参数来访问数据。它会产生一个未定义的。

HTML

<li class="als-item">
    <button onclick="somefunc1(this)" id="mybutton" 
        data-loc-subject="test value">My Button</button>
</li>

JS

function somefunc1(button) {
  // this alert prints "undefined"
  alert($(this).data('loc-subject'));
  // this will print "test value"
  alert($('#mybutton').data('loc-subject'));
}

普朗克

于 2013-08-11T00:23:50.057 回答
3

"data-"属性前缀应该在你的调用中去掉,.data()所以假设:

<span class="als-item" data-loc-subject="foo">ohai</span>

它将通过以下方式检索:

console.log($(".als-item").data("loc-subject"));
于 2013-08-11T00:24:14.130 回答
1
<div id="someID" attr1="this is attr 1" data-attr-1="data attribute 1"></div>

您可以使用找到任何元素属性

$("#someID").attr('attr1') [or] $("#someID").attr('data-attr-1');

根据元素是否具有属性来定位,您可以执行以下操作:

$("[attr1]") or $("[attr1='this is attr 1']"),它将返回元素(不是属性值)

于 2013-08-11T00:25:01.063 回答
0

根据您的条件设置数据属性

 <a id="edit" data-lan="my-data" onclick="onEdit(this)">Edit</a>

    function onEdit(obj) {
     console.log(this.getAttribute("data-lan")); //my-data
    }
于 2019-11-27T10:12:00.150 回答