HTML5特性--->Property和Attributes

正在学习HTML5的新特性,博客记录之

目录

1.引子

2.HTML的property和attribute

    1.什么是attribute?

2.什么是property?

3.property和attribute的同步问题 

1.非布尔值的同步问题

2.布尔值属性的同步

4.浏览器认谁?

5.用户操作的是谁?

6.总结

1.什么是attribute,什么是property    

 

2.什么是布尔值属性,什么是非布尔值属性  

 

3.attribute和property的同步关系    

4.用户操作的是property

 

5.浏览器认的是property


1.引子

        首先我们来看一个效果,来引出今天的主题

   

全选效果

    从上面的例子中可以看出,全选按钮在按过一次之后。我们手动取消了几个选项的选中状态再点击全选按钮时就已经不起作用了。这是为什么呢?先不要着急我们再来看一个效果

全选效果-2

 

         可以看到上面两个例子产生的效果截然相反,一个是手动点击取消了选中之后无法再通过全选按钮选中,另一个则是可以。产生这个效果的原因是什么呢?我们来分析一下代码。

      

$(function(){
	$("#CheckedAll").click(function(){
		$("input[type=checkbox][name=items]").prop("checked", true);
		$("#checkedAll_2").prop("checked", true);
	});
});
$(function(){
	$("#CheckedAll").click(function(){
		$("input[type=checkbox][name=items]").attr("checked", true);
		$("#checkedAll_2").attr("checked", true);
	});
});

上面两端代码基本上相同,唯一不同的地方就是方法调用那里,一个是prop(property),另一个则是attr(attrbute)。看来这两个方法的不同就是造成不同效果的原因了!那么这两个方法有什么不同,它们都操作了什么属性才造成这样的效果呢?

2.HTML的property和attribute

    1.什么是attribute?

        先来看一段简单的代码

<script type="text/javascript">
	
	
	
	
		debugger
		var hzx = document.querySelector("input[type=checkbox]");
</script>

这一段代码中我们加上了一个断点,这样可以使得代码在断点位置暂停。当我们一步步执行代码到最后一句时可以在监控中看到input标签的attributes数组

attributes

可以看到在attributes数组中的三个成员就是html属性,这其中又分为html预定义属性和用户自定义属性。

2.什么是property?

  

property

可以看到,property就是js原生对象的直接属性,从上面也可以看到每一个attributes里面的属性都会有一个property与之对应。

3.property和attribute的同步问题 

    让我们先来抛出两段代码

   

	var qhf = document.querySelector("input[type=checkbox]");
		
		debugger
		qhf.setAttribute("name","qhf1")
		qhf.setAttribute("name","qhf2")
		qhf.setAttribute("name","qhf3")
		
		qhf.name="qhf4";
		qhf.name="qhf5";
		qhf.name="qhf6";
		
		qhf.setAttribute("name","qhf7")
		qhf.setAttribute("name","qhf8")
		qhf.setAttribute("name","qhf9")
	var qhf = document.querySelector("input[type=checkbox]");
		
		debugger
		qhf.setAttribute("checked","qhf1")
		qhf.setAttribute("checked","qhf2")
		qhf.setAttribute("checked","qhf3")
		
		qhf.checked="qhf4";
		qhf.checked="qhf5";
		qhf.checked="qhf6";
		qhf.checked=false;
		
		qhf.setAttribute("checked","qhf7")
		qhf.setAttribute("checked","qhf8")
		qhf.setAttribute("checked","qhf9")

1.非布尔值的同步问题

在第一个代码段中,我们书写了一些设置非布尔值属性的代码。让我们来看看这里面的property和attributes是否会同步

非布尔值的同步

可以看到对于非布尔值属性的同步问题,不管什么情况  property和attribute都会同步

2.布尔值属性的同步

布尔值的同步

 从上面可以看到,在没有动过property时,attribute会同步property, 一旦动过property ,attribute不会同步property。

4.浏览器认谁?

  我们来看一段代码

 

	var qhf = document.querySelector("input[type=checkbox]");
		var btn = document.querySelector("input[type=button]");
		btn.onclick=function(){
			debugger
			qhf.checked=true;
		}

运行这段代码后,可以看到

浏览器认谁

只有property属性变成了true,说明浏览器认的是property。

5.用户操作的是谁?

   老规矩,来看一段代码块。

   

	var qhf = document.querySelector("input[type=checkbox]");
		qhf.onclick=function(){
			debugger
		}

运行后可以看到

用户操作的是谁

在我们选中单选框后,property变成了true,说明用户操作的是property。

6.总结

1.什么是attribute,什么是property
    

 html标签的预定义和自定义属性我们统称为attribute
    js原生对象的直接属性,我们统称为property

 

2.什么是布尔值属性,什么是非布尔值属性
  

 property的属性值为布尔类型的  我们统称为布尔值属性
 property的属性值为非布尔类型的  我们统称为非布尔值属性

 

3.attribute和property的同步关系
    

       非布尔值属性:实时同步
        布尔值属性:
        property永远都不会同步attribute
        在没有动过property的情况下
            attribute会同步property
        在动过property的情况下    
            attribute不会同步property

4.用户操作的是property

 

5.浏览器认的是property

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值