排他思想
1 | <body> |
属性操作
获取属性值
1 | <body> |
上面两种方法的区别:第一种方法,element.属性用于获取内置内置属性值;第二种方法,element.getAttribute(‘属性’)用于获得自定义的属性。那还有一个核心问题:自定义属性和内置属性怎么判断?H5规定自定义属性以data-开头作为属性名并且赋值,例如:data-index。下面是H5新增的获取自定义属性的方法,只能获取data-开头的
1 | <body> |
设置属性值
1 | <body> |
和获得属性值的两种方法一样,设置属性的第一种方法用于修改内置属性,第二种方法针对自定义的属性。除了这点,还有一个区别:在修改class属性上,第一种方法:div.className=’类名’,第二种方法:div.setAttribute(‘class’,’类名’)
移除属性
1 | div.removeAttribute('属性名 ') |
节点操作
节点操作用于利用节点层级关系获取元素。利用DOM提供的方法getElementById()等逻辑性不强,比较繁琐。所以我们需要利用父子兄弟节点关系获取元素
一般地,节点至少拥有nodeType(节点类型)、nodeName(节点名称)和nodeValue(节点值)这三个基本属性
元素节点 nodeType为1,节点操作主要操作的是元素节点
属性节点 nodeType为2
文本节点 nodeType为3,换行、空格也是文本节点
父节点&子节点
1 | <body> |
childNodes得到的是所有的子节点,如果我们只要元素节点。我们要用children,这可以返回所有的子元素节点,其余节点不返回
1 | console.log(ul.children) |
1 | //返回第一个子节点,不管是文本节点还是元素节点 |
后两种方法有兼容性问题,在实际开发中,我们可以用索引访问children
兄弟节点
1 | <body> |
上面代码的后两种api也是有兼容性问题的,PS:IE,一生之敌。解决办法:只能自己封装一个函数
创建、添加节点
1 | <body> |
appendchild是将一个节点添加到指定父节点的子节点列表末尾,那如何添加到前面呢?insertBefore
1 | node.insertBefore(child,指定元素) |
删除节点
1 | <body> |
复制节点
node.cloneNode()方法返回调用该方法的节点的一个副本。
注意:1、如果括号参数为空或者为false,则是浅拷贝,即只复制标签不复制里面的内容
2、如果括号参数为true,则是深拷贝,即复制表情且复制里面的内容
1 | <body> |