JS-DOM基础

1     JS-DOM

全称:document object model

1.1 获取页面元素

getElementsByTagName():无论元素的数量是多少,都会存入数组

getElementById():

getElemnetsByClassName():不推荐使用,有兼容问题。

1.2 标签的自定义属性

1)        通过在html里直接在标签中添加属性;

2)        通过JS添加属性:标签.属性=值;

3)        setAttribute(a,b)设置值为b的属性a,

4)        getAttribute(a)获取属性a,

5)        removeAttribute(a)移除属性a;

 1 <input type="text" id="t" a="haha"/>
 2 
 3 <script>
 4 
 5     var t=document.getElementById("t");
 6 
 7     t.c="cc";
 8 
 9     console.log(t.c);
10 
11     console.log(t.getAttribute("c"));
12 
13     console.log("\n");
14 
15     console.log(t.id);
16 
17     console.log(t.a);
18 
19     console.log(t.getAttribute("id"));
20 
21     console.log(t.getAttribute("a"));
22 
23     console.log("\n");
24 
25     console.log(t.setAttribute("a","bibi"));
26 
27     console.log(t.setAttribute("b","lili"));
28 
29     console.log(t.getAttribute("b"));
30 
31 </script>

结果:

 

 

1.3 事件

1.3.1   三要素

1)        事件源(发生事件的对象)

2)        事件名称

3)        事件处理程序(要执行的内容)

如果分不清楚,那么举个栗子:小明被小刚打了,小明就进了医院。那么事件源就是小明,事件名称是:被打了,事件处理就是小明被送进了医院。

1.3.2   注册事件

行内:在对应的标签内添加:on+事件名=“要执行的内容”;

内嵌:

1)        在js标签内书写:对象.on+事件名=function(){执行内容}

2)        事件监听

注意:使用for循环给一组元素添加事件监听的时候,在事件处理里面千万不要出现for循环的计数器。原因:事件注册的时候是不会执行具体的事件处理代码的,所以执行事件时的计数器就会是最后执行的计数器值。

1.3.3   常用事件:

.onclick():点击

.onmouseover:鼠标进入

.onmousemove:鼠标移动

.onmouseout:鼠标移出

.onkeydown:键盘按下

.onkeyup:键盘抬起

1.4 获取内容

1)        对象.innerHTML:包括标签及文字内容

2)        对象.innerText:只包含文字内容,早期火狐不支持

3)        对象.textContent:只包含文字内容,早期ie不支持

1.5 节点

1.5.1   节点的组成

三种节点

nodeType

nodeName

nodeValue

标签(元素)

1

标签名

Null

属性

2

属性名

属性值

文本(内容)

3

#text

文本内容

<ul id="ul">
    <li>111</li>
    <li>222</li>123
    <li id="li">333</li>
    <li>444</li>
</ul>
 1 <script>
 2     var ul = document.getElementById("ul");
 3     var ulId=ul.getAttributeNode("id");
 4     console.log(ulId.nodeName);
 5     console.log(ulId.nodeType);
 6     console.log(ulId.nodeValue);
 7 
 8     var li = document.getElementById("li");
 9     var lis = ul.childNodes;
10     for (var i=0;i<lis.length;i++) {
11         console.log(lis[i].nodeName);
12         console.log(lis[i].nodeType);
13         console.log(lis[i].nodeValue);
14     }
15 </script>

结果:

     

 

1.5.2   节点的获取

父节点:parentNode;

子节点:

childNodes:标准的DOM属性,获取所有,包括文本节点,IE8及以前会忽略空白文本节点

children:非标准DOM属性,只获取元素(标签)节点,所有浏览器都支持。

兄弟节点:

previousSibling:IE8及以前会忽略空白文本节点

previousElementSibling:IE8及以前不支持

nextSibling:IE8及以前会忽略空白文本节点

nextElementSibling:IE8及以前不支持

<ul id="ul">

    <li>111</li>

    <li>222</li>123

    <li id="li">333</li>123

    123<li>444</li>

</ul>
 1 <script>
 2 
 3     var ul=document.getElementById("ul");
 4 
 5     var li=document.getElementById("li");
 6 
 7     console.log(ul.childNodes);
 8 
 9     console.log(ul.children);
10 
11     console.log(li.parentNode);
12 
13     console.log(li.previousSibling);
14 
15     console.log(li.previousElementSibling);
16 
17     console.log(li.nextSibling);
18 
19     console.log(li.nextElementSibling);
20 
21 </script>

在chorm中的执行结果:

  

IE8中的结果:

 

总结:

 

Chorm,firefox

IE8及以前

.childNodes

标签节点+文本节点

标签节点+非空文本节点

.children

标签节点

标签节点

.previousSibling

标签节点||文本节点

非空文本节点||标签节点

.previousElementSibling

标签节点

Undefined

.nextSibling

标签节点||文本节点

非空文本节点||标签节点

.nextElementSibling

标签节点

Undefined

1.5.3   操作节点

.cloneNode(boolean):复制节点,true全部克隆,false只克隆当前标签节点

.appendChild():追加节点到末尾

<ul id="ul">
    <li>1111</li>
    <li>2222</li>
    <li id="li">3333</li>
    <li>4444</li>
</ul>
1 <script>
2     var ul=document.getElementById("ul");
3     var li=document.getElementById("li");
4     ul.appendChild(li.cloneNode(true));
5     ul.appendChild(li.cloneNode(false));
6     ul.appendChild(ul.cloneNode(true));
7 </script>

结果:

.removeChild():移除子节点

.insertBefore(a,b):将子元素a插入到b之前

1.6 动态 创建元素

document.write();注意:写在函数内会覆盖原来的页面元素

innerHTML注意:使用它拼接字符串效率非常低

document. createElement("标签名")

 

posted @ 2016-08-11 23:15  ♥卿  阅读(217)  评论(0编辑  收藏  举报