DOM

  1. 文档对象模型(DocumentObjectModel)
  2. W3C的,独立于平台和语言的一套标准(XML)(不一定在html使用)
  3. DOM定义了所有HTML元素的对象和属性,以及访问它们的方法。

    DOM树

  4. 可以将任何的HTML文档描绘成由多个层次的节点构成的结构。

  5. 浏览器接收到H5代码,解析成一个DOM树,根据页面上的标签建立起来一个树形结构,或是对象;树上得节点就是页面上的属性以及标签。
  6. document是一个根节点

    DOM树的节点种类

    HTML中的节点种类有10多种,常用的有以下三种:
  • 元素节点:页面中的标签,div ul span…
  • 属性节点:标签的属性,id class name type style
  • 文本节点:例如:

    hello

    hello就是一个文本节点
  • 注释也是一种节点

    DOM树节点的相关属性

    nodeType、nodeName、nodeValue
    nodeType值决定了nodeName,nodeValue值:
  1. 元素节点(nodeType === 1)

nodeName = 元素Tag名(DIV)
nodeValue = null

  1. 属性节点(nodeType ===2)

nodeName = 属性名称(id,type)
nodeValue = 属性值

  1. 文本节点(nodeType === 3)

nodeName = #text
nodeValue = 文本内容

  1. 空文本节点:

    childNodes
  2. 通过childNodes,可以取得一个节点下的所有子节点。

  3. 通过childNodes,取得的节点中,包含文本和空文本节点 ```html /chrome、FF、IE11动作一致 IE8中、元素包含
    时,无空文本节点, 元素包含时,有空文本节点。 通常我们只处理元素节点/

var ul = document.getElementsByTagName(‘ul’) var nodes = ul[0].childNodes; console.log(nodes.length); // 7, 4个换行,3个标签

  1. <a name="eMmrf"></a>
  2. ##### children
  3. 1. 取得一个元素的子元素节点
  4. 2. 这里的以及上面的子节点都只是儿子节点不包括孙子节点等
  5. ```javascript
  6. var node = ul[0].children;
  7. console.log(node.length); //3
  8. console.log(node[2]); //<a href></a>

从DOM树上获取元素节点:

1. document.getElementById( id名 )

2. xxx.getElementsByTagName( 标签名 )

xxx可以是document,也可以是某个元素节点
取得的是xxx以内的指定标签名的所有元素

3. xxx.getElementsByClassName( class名 )

4. xxx.getElementsByName()

只有input默认有name属性
但H5支持自定标签、属性 !!!!

5. xxx.querySelector()

通过选择器选择元素,只能取到被选中元素的第一个

6. xxx.querySelectorAll()

通过选择器,取到所有匹配的元素

  1. !!!以上所有除了1,5返回的都是数组
  2. 所有的参数都是字符串
  3. 参数为’*’,表示所有

DOM节点的方法和属性:

取到的每一个节点就是一个对象; 其属性和方法如下:

1.el.setAttribute(属性名, 属性值)
  1. var ul =document.getElementsByTagName('ul')
  2. var list =ul[0].querySelector('li') //ul[0]为一个元素节点,就是上述的xxx,一定要取出来才能用
  3. list.setAttribute('class','add')

2.el.getAttribute(属性名)
  1. <li style="height:100px"><a href=""></a></li>
  2. <script>
  3. var ul =document.getElementsByTagName('ul')
  4. var list =ul[0].querySelector('li')
  5. console.log(list.getAttribute('style'))
  6. //height:100px; 这里取到的只能是style的行间样式,css中的不行
  7. </script>

3.el.removeAttribute(属性名)
  1. list.removeAttribute('style')

4.获取属性
  1. <div id="box"class="add"style="width:100px;height:100px;background:blue">我是一个div</div>
  2. var div = document.querySelector('div')
  3. console.log(div.id); //box
  4. console.log(div.className); //add
  5. console.log(div.tagName); //DIV
  6. console.log(div.style); // 整个style属性包括默认的写上的
  7. console.log(div.style.width) //100px
  8. console.log(div.style.background) //blue
  9. console.log(div.innerHTML); //我是一个div
  10. console.log(div.outerHTML); //整个div;<div id="box" class="add" style="width:100px;height:100px;background:blue">我是一个div</div>

5.修改属性
  1. div.id ='box1';
  2. div.className='block'
  3. div.tagName ='p'//修改无效
  4. div.style.position ='absolute'
  5. div. border = '3px solid red'
  6. div.style.borderRadius='5px'

原来没有的属性写上就等于是添加上了属性

6.删除属性
  1. div.style.background='';