我正在寻找这个。找到了此old article和this。但不适合我。
我的问题是:我无法通过jQuery将增量data-id
设置为HTML元素。我能够提醒相同,但我没有设置HTML。如果我检查,元素没有变化。
的jQuery
$(document).ready(function() {
$("#search").click(function(){
var num = $(this).data('id');
num++;
$("span").text(num);
$(this).data('id', num);
});
});
我也尝试了这个
$(this).data('id') === num;
我正在使用v1.9.1
并且在控制台中没有错误。如果有人能找到这个问题,它会很棒。
答案 0 :(得分:8)
所有其他答案都是正确的 - 将'val'
修改为val
- 这当然解决了NaN
问题。
但问题是:
我不能通过jQuery将增加的data-id设置为HTML Element。我能够 警告相同,但我没有设置HTML。没有变化 如果我检查那个元素。
jQuery对data
使用内部表示(1)。如果您想在检查器中看到data-id
,则需要使用:
$(this).attr('data-id', num);
(1)“内部代表”:
所有数据都存储在名为cache的jQuery对象的属性中。 在控制台中记录$ .cache的内容以查看所有数据和事件 与任何DOM元素相关联。
答案 1 :(得分:2)
问题在于这一行。
$(this).data('id', 'num');
num应该是变量,而不是字符串。
将其更改为此,它将正常工作:
$(this).data('id', num);
答案 2 :(得分:2)
试试这个:
$(this).attr('data-id');
这是设置属性:
$(this).attr('data-id', num);
答案 3 :(得分:1)
标准Pure Javascript data-attr
试试这个
this.dataset['id']=num;
或
this.dataset.id=num;
修改强> 基于评论以及为什么我不使用jaquery
这是从jquery的代码中获取的data-attr的部分函数。(我不使用jquery)
function dataAttr( elem, key, data ) {
var name;
// If nothing was found internally, try to fetch any
// data from the HTML5 data-* attribute
if ( data === undefined && elem.nodeType === 1 ) {
name = "data-" + key.replace( rmultiDash, "-$1" ).toLowerCase();
data = elem.getAttribute( name );
if ( typeof data === "string" ) {
try {
data = data === "true" ? true :
data === "false" ? false :
data === "null" ? null :
// Only convert to a number if it doesn't change the string
+data + "" === data ? +data :
rbrace.test( data ) ? jQuery.parseJSON( data ) :
data;
} catch( e ) {}
// Make sure we set the data so it isn't changed later
data_user.set( elem, key, data );
} else {
data = undefined;
}
}
return data;
}
答案 4 :(得分:-1)