文档对象模型规定了浏览器应该如何创建HTML页面的模型,以及JavaScript如何访问或修改浏览器窗口中的WEB页面的内容。

  一、了解DOM树

  DOM既不是HTML的一部分,也不是JavaScript的一部分,而是一系列独立的规则。所有主流浏览器都实现了这些规则,规则主要有两个方面:

  1、规定HTML页面的模型:

  浏览器在加载WEB页面时,会在内存中创建页面的模型。DOM规定了浏览器应该使用DOM树来创建这个模型。

  DOM树被称为“对象模型”是因为这个模型是由一些对象组成的。每个对象都会作为页面的不同部分被加载到浏览器窗口中。

  2、访问和修改页面:

  一般把DOM称为API。用户界面是人和程序之间交互的媒介,而API则是程序(以及脚本)之间通信接口。

  DOM规定了脚本可以向浏览器询问当前页面相关的哪些内容,以及如何通知浏览器去修改用户看到的内容。

  DOM树的组成:

  DOM树由四类节点组成:文档节点、元素节点、属性节点、文本节点。

  1、文档节点是DOM树的顶端,它呈现为整个页面。相当于document对象,当需要访问任何元素、属性或文本节点时,都需要通过文档节点来导航。

    2、HTML元素的开始标签中可以包含若干属性,这些属性在DOM树种形成属性节点。

  属性节点是元素的一部分。当访问一个元素时,有特定的方法和属性用来读取和修改这个元素的属性。

  3、当访问元素节点时,可以访问元素内部的文本,这些文本保存在其文本节点中。文本节点没有子节点。

  二、使用DOM树

  访问并更新DOM树需要两个步骤:

  1、定位到与需要操作的元素所对应的节点。

  2、使用它的文本内容、子元素或属性。

  三、NodeList:返回多个元素的DOM查询

  Nodelist是一组元素节点的集合。每个节点都有索引编号(从0开始)。元素在NodeList中保存的顺序和它们在页面中出现的顺序一样。

  geyElementsByTagName();getElementsByClass();均会返回一个NodeList。

  使用CSS选择器选择元素:

  querySelector()方法返回匹配CSS样式选择器的第一个节点。querySelectorAll()方法以NodeList的形式返回满足条件的所有节点。下面两行代码的返回值不同。

var el = document.querySelector(li.hot);
var el = document.querySelectorAll(li.hot);

  在NodeList中选择元素,有两种方法:使用items()方法以及数组语法。

var first = student.item(0);
var second = student[1];

  四、遍历DOM

  得到一个元素节点后,可使用以下五个属性来找到其他相关的元素。即遍历DOM。

  parentNode:当前节点父节点

  previousSibling、nextSibling:当前节点前后兄弟节点。如果不存在,结果会是NULL。

  firstChild、lastChild:当前节点的第一个或最后一个孩子节点。

  这些属性是只读的,只能选择一个节点,不能改变其父亲、兄弟和孩子节点。

  五、使用nodeVaule属性获取和更新文本节点

<li id="one"><em>fresh</em>figs</li>
document.getElementById('one').firstChild.nextSibling.nodeValue;

    六、使用textContext获取和更新文本

  七、添加和移除HTML内容

  1、使用innerHTML获取和更新文本及标签:

var elcontent = "hello";
document.getElementById('one').innerHTML = elcontent;

  2、向DOM中添加元素,涉及三个步骤:

  1.创建元素:creatElement();

  首先需要使用creatElement()方法创建一个新的元素节点。将该元素节点保存到元素中。

  2.设置内容:creatTextNode();

  创建一个新的文本节点。同样的需要保存到一个变量中。

  3.将创建的节点添加到DOM中:appendChild();

  该方法允许指定需要把这个节点添加到哪个元素上,并作为该元素的子节点。

var newel = document.createElement('li');
var newText = document.createTextNode('quinoa');
newel.appendChild(newText);
var position = document.getElementsByTagName('ul')[0]  //NodeList
position.appendChild(newel);

  八、通过DOM操作移除元素

  1、把需要移除的元素保存到一个变量中。

  2、将该元素的父节点保存到变量中。

  得到父节点最简单的方法就是使用元素的parentNode属性。

  3、把元素从它包含的元素中移除

  在步骤二中得到的元素使用removeChild()方法。

  注意:当从DOM中移除一个元素时,也会移除它的所有子元素。

     从DOM中移除元素会影响到它的兄弟节点在NodeList中的索引。

var removel = document.getElementsByTagName('li')[3];
var containerel = removel.parentNode;
containerel.removeChild(removel);

  九、技术比较:更新HTML内容

  1、document.write()

  优点:可以简单快速的向页面中添加内容

  缺点:1.只在页面初始化加载时有效

              2.如果在页面加载完之后使用该方法,会碰到以下问题:1)整个页面被覆盖。2)不是向页面中添加内容。3)创建一个新页面

     3.在严格验证的XHTML中可能会遇到问题。

  2、element.innerHTML

  innerHTML允许以字符串的方式获取和更新任何元素中的整个内容。

  优点:1.和DOM操作相比,可以使用更少的代码添加大量的标签

           2.向页面中添加大量元素时,速度比DOM操作快。

        3.当需要移除一个元素时,操作简单,直接设为空字符串即可。

  缺点:1.不应该用它添加用户输入的内容。可能会带来安全隐患。

       2.添加大的DOM片段时,很难独立区分每一个元素。

  3、DOM操作

  DOM操作提供了一组方法和属性,用来访问、创建以及更新元素和文本节点

  优点:1.不影响事件处理程序。  

       2.可以轻易的使用脚本逐步添加元素。

  缺点:代码量大,速度慢。

  十、属性节点

  1、检查一个属性并获取它的值

  2、创建属性并更改其值

  3、移除属性

  方法:

  getAttribute():获取属性值

  hasAttribute():检查元素节点是否包含特定属性。

  setAttribute():设置属性值

  removeAttribute():从元素节点移除属性

var firstItem = document.getElementById('one');
if(firstItem.hasAttribute('class'))
{
     firstItem.removeAttribute('class');   
}
firstItem.setAttribute('class','cool')

 

posted on 2016-04-10 17:12  suvllian  阅读(212)  评论(0)    收藏  举报