您不需要在数据名称前面加上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'));
}
普朗克