DOM属性

属性的分类

 

固有属性

在浏览器控制台中的properties选项中能够看到

 title也是固有属性,只不过我们没有设置它的值,因此为空字符串。

属性的继承性:

自定义属性

自己定义的属性。

 如果定义了同名的属性,以第一个为准。

属性的名字都为小写字母,即使定义的时候用了大写,最终也会转换为小写。

访问自定义属性

通过nodeValue可以访问所选自定义属性的值。 

getNamedItem这个方法不能获取未定义的固有属性节点,如果显示定义赋值了,可以获取。

删除自定义属性

 

 创建自定义属性

 

 第一个参数必须是属性对象。

访问固有属性 

对象.属性

主流浏览器这种方式访问自定义属性会返回undefined,但在IE上是可以访问的,但不推荐。

通用操作属性的方法

getAttribute()可以获得指定属性名的属性值

注意:

1.参数大小写不敏感

2.有些固有属性通过  对象.属性 和 getAttribute()方法 获得的值是不同的

如:访问style, onclick这两个固有属性时,使用getAttribute方法,返回的是属性值的内容,使用“.”方法返回的是对象。
所以一般只有在取自定义属性值的时候才用getAttribute()。

 谷歌和IE8 结果一致

 

 

 谷歌浏览器和IE8结果一致

 

div.setAttribute(属性名,属性值);为指定的节点设置属性和属性值;
既可以创建新的属性值,也可以修改已有值;
在设置固有属性时,存在兼容问题,ie8及以上支持

removeAttribute(‘属性名’)
删除一个属性

 所有浏览器都兼容。未定义的固有属性是不能通过该方法删除的。

常见固有属性

布尔属性

控制元素某一状态的,比较特殊的属性。

上述是用js代码,让checkbox选中。

这里的值只要是非空字符串就可以,使checkbox。转换为布尔值是false就是不选中。但在IE7及以下浏览器是不生效的。还是建议用标准的方式来写。

总结:

不管把属性值设置成什么,都会自动的转化为true 或者 false , 不推荐此方法 IE7及一下不支持
如:checked ( 默认选中 , 一般用于checkbox)
selected ( 默认选中 ,一般用于option)
readOnly(O必须大写) (不能修改数据 , 但不影响数据传输 , 后端仍然可以获得该数据)
disabled (提交后后端不会获得该数据)
multiple ( 多选 , 按住ctrl和shift可以多选)可以让下拉菜单变成列表菜单
hidden ( 隐藏 );Html5新增属性
JavaScript操作这些固有属性还是用 node.property

关于checked属性不能通过removeAttibute方法删除的理解:

因为代码中设置的方法并没有添加在dom上(简单来说,它实际上是没有被显示定义的)

http://img1.sycdn.imooc.com/climg/5e54e8fb09487e4c00000000.jpg

http://img1.sycdn.imooc.com/climg/5e54e8e909207cd204300379.jpg

所以通过removeAttribute方法删除不掉。

如果想要删除,这里有一个特殊的知识点 ,html里的属性和dom中的属性大多数名称是一样的,但是有些不相同。比如html的checked, selected, value属性,对应dom对象里的名称叫defaultChecked,defaultSelected,defaultValue,而不是原名。例如:

http://img1.sycdn.imooc.com/climg/5e54e962094673be04960152.jpg

http://img1.sycdn.imooc.com/climg/5e54e96d0986e9b604170095.jpg

然后再使用方法移除

http://img1.sycdn.imooc.com/climg/5e54e9ae09d92d8005260162.jpg

http://img1.sycdn.imooc.com/climg/5e54e9b409ab822d02830054.jpg

字符串属性 

id:表示元素的唯一标识;一个页面上不能出现相同id值的两个元素
title:可见元素在鼠标掠过时出现的提示信息
href:一般用于a和link这两个元素,表示超链接
src:用于image、script、object等等,表示数据的来源
lang:是language,表示辅助搜索引擎或者印刷机、读音器等等使用的属性
dir:用与文本的输出方向,一般有两个方向(ltr和rtl)伴着<bdo></bdo>出现
accesskey:表示某个组合键,通过键盘的快捷键使某个元素被选中。例:谷歌浏览器中,按住alt + 设置的按键,就可以快捷选中对应元素
name:一般用于表单元素,表示控件的名字
value:一般用于表单元素,是控件要传到后端的值
class:定义在元素上引用的样式

W3C全局属性

contenteditable:是否可编辑元素的内容,一般和spellcheck组合使用,如果内容可编辑,判断它的语法是否正确
hidden:可以隐藏一个元素,元素设置为hidden后既隐藏,但是可以通过js去掉这个属性,让它显示出来
spellcheck:一般和contenteditable组合使用,如果内容可编辑,判断它的语法是否正确
style:可以定义某个元素的样式
tabindex:规定当使用“tab”键进行导航时元素的顺序
translate:规定是否应该翻译元素内容,目前所有的主流浏览器都无法正确支持该属性

 data属性

近几年引入的新属性,它的名字都以 data- 开头,这个属性用于存储页面或应用程序的私有定义数据。

在jQuery UI、bootstrap这些流行库中,它们被用于作为组件的配置信息使用。

理解:

js中用dataset获取(浏览器设置好的)如果是data后面-,直接换成点 . 就好。
如果是多个-分隔 的,字符串,用驼峰来获取如data-xxx-yyy,则dataset.xxxYyy 对于设置私有属性,可以使用新增属性:"data-xxxx"。js中用dataset来获取此类属性的集合。
如果data-后面是一个单词,比如:data-one,那么使用:Ele.dataset.one来获取属性值;
如果data-后面不是一个单词,比如:data-one-two,那么使用:Ele.dataset.oneTwo(驼峰形式)来获取属性值
注意:dataset属性具有兼容性问题!IE8及以下不兼容

class属性 

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3   <head>
 4     <meta charset="utf-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <title>class attributes</title>
 7     <script src="domReady.js"></script>
 8     <script>
 9       var CC = {
10         getClass: function(ele) { //获取类
11           return ele.className.replace(/\s+/, " ").split(" ");
12         },
13 
14         hasClass: function(ele, cls) { //判断是否有某个类
15           return -1 < (" " + ele.className + " ").indexOf(" " + cls + " ");
16         },
17 
18         addClass: function(ele, cls) { //添加类
19           if (!this.hasClass(ele, cls))
20             ele.className += " " + cls;
21         },
22 
23         removeClass: function(ele, cls) { //删除某个类
24           if (this.hasClass(ele, cls)) {
25             var reg = new RegExp('(\\s|^)' + cls + '(\\s|$)', "gi");
26             ele.className = ele.className.replace(reg, " ");
27           }
28         },
29 
30         toggleClass: function(ele, cls) { //如果传入的类名在元素上定义过,就删除这个类;如果没定义过,就增加这个类。
31           if (this.hasClass(ele, cls)) {
32             this.removeClass(ele, cls);
33           } else {
34             this.addClass(ele, cls);
35           }
36         }
37       };
38 
39       myReady(function() {
40         var body = document.body;
41         console.log(CC.getClass(body));
42         console.log(CC.hasClass(body, 'bbb'));
43         CC.addClass(body, 'ccc');
44         CC.removeClass(body, 'aaa');
45         CC.toggleClass(body, 'bbb');
46       });
47     </script>
48   </head>
49   <body class="aaa bbb aaa">
50       TEST
51   </body>
52 </html>

classList属性

在一些比较新的浏览器中,元素节点的一个新属性。IE11以下不支持。

这个属性中有add、remove、contains、toggle等方法。

元素.classList.方法名(参数)

 1 <!DOCTYPE html>
 2 <html lang="zh">
 3   <head>
 4     <meta charset="utf-8">
 5     <meta name="viewport" content="width=device-width, initial-scale=1">
 6     <title>classList</title>
 7     <script src="domReady.js"></script>
 8     <script>
 9       var CL = {
10         addClass: function(ele, cls) {
11           ele.classList.add(cls);
12         },
13 
14         removeClass: function(ele, cls) {
15           ele.classList.remove(cls);
16         },
17 
18         hasClass: function(ele, cls) {
19           return ele.classList.contains(cls);
20         },
21 
22         toggleClass: function(ele, cls) {
23           return ele.classList.toggle(cls);
24         }
25       };
26 
27       myReady(function() {
28         var body = document.body;
29         console.log(CL.hasClass(body, 'bbb')); // true
30         CL.addClass(body, 'ccc');
31         CL.removeClass(body, 'aaa');
32         CL.toggleClass(body, 'bbb');
33 
34         setTimeout(function(){
35             alert(document.body.classList.toString()); //ccc
36         },2000);
37       });
38     </script>
39   </head>
40   <body class="aaa bbb aaa">
41       TEST
42   </body>
43 </html>

 

posted @ 2020-02-25 17:39  阿江是个程序猿  阅读(621)  评论(0编辑  收藏  举报