data、attr、prop的一些坑

在一个项目中使用jquery的data方法和attr方法操作元素的属性时遇到了一些坑,特此整理下data、attr、prop的区别

问题来源:

某个元素具有data-key属性,js使用xx.attr('data-key')操作该元素,在chrome开发者工具中查看Elements,该元素的data-key属性确实更改为新赋予的值,但是在用xx.data('key')取值的时候,发现还是原先最开始的值,从而导致一系列BUG

测试:

<!DOCTYPE html>
<html lang="en">
<head>
	<meta charset="UTF-8">
</head>
<body>
	<div id="div" data-key="1"></div>
	<script src="js/jquery-3.1.1.min.js"></script>
	<script>
		//1
		console.log($('#div').data('key'));				//1		number类型
		console.log($('#div').attr('data-key'));			//1		string类型

		//2
		$('#div').data('key', '2');
		console.log($('#div').data('key'));				//2		string类型
		$('#div').data('key', 2);
		console.log($('#div').data('key'));				//2		number类型

		//3
		$('#div').attr('data-key', '3');
		console.log($('#div').data('key'));				//2		number类型
		console.log($('#div').attr('data-key'));			//3     	string类型

		//4
		$('#div').attr('name', '4');

		//5
		$('#div').prop('age', '5');
		console.log($('#div').prop('age'));				//5		string类型
		console.log($('#div').attr('age'));				//undefined
		console.log($('#div').data('age'));				//undefined

		//6
		$('#div').prop('data-key', '6');
		console.log($('#div').prop('data-key'));			//6		string类型
		console.log($('#div').data('key'));				//2		number类型
	</script>
</body>
</html>
第一步:使用data取值的时候,返回的是number类型,用attr取值的时候,也可以取到,但取到的值是字符串类型

第二步:赋值的时候的区别

第三步:用attr赋值的时候,去开发者工具查看,确实改过来了,但是再用data输出的时候,却仍然是原先的值,用attr则可以,这里非常容易被开发者工具中的假象所迷惑,需要注意,实际上如果你的data属性和attr属性名字一样,开发者工具中只会保留后一个

第四步:attr赋值一个新名字,开发者工具有显示出来

第五步:prop赋值,开发者工具不显示,但可以通过prop取值,用attr和data不能取,返回undefined

第六步:prop也不会改变最初的data赋值


attr、data、prop区别:

attr取值的时候,永远都是string类型,无论是boolean或者number,需要特别注意,且对大小写不敏感,attr('name')和attr('NAME')实际一样,attr主要用于获取属性

data取值的时候,会对boolean或者number自动进行类型转化,如data-key='true'实际取值等于boolean类型的true,同样data-key='11'等于number类型的11,且赋值的时候,注意是否需要传入引号,如data('key', '1')和data('key', 1)并不一样

另外特别需要注意的是data定义名字的时候,尽量不要使用驼峰定义法,即类似myName这种,实际取值的时候,data('myName')会返回undefined,而data('myname')却可以取到值

prop,用于取值元素固有的属性的时候,即本身就自带的属性,如checked、selected、href、target、id、class等,建议使用prop

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值