WEB基础__Dom


DOM 

全称:document  object  model  文档对象模型。

用来将标记型文档封装成对象,并将标记型中的所有内容(标签,文本,属性)都封装成对象。

为什么要将这些文档以及其中的标签封装成对象呢?

因为可以在对象中定义其属性和行为,可以更方便的操作这些对象。

因为对象的出现就可以有属性和行为被调用。

 

文档:标记型文档。

对象:封装了属性和行为的实例,可以直接调用。

模型:所有标记型文档都具有一些共性特征。

 

三层模型:

dom1:将html文档封装成对象。

dom2:在dom1的基础上加入了新的功能,比如解析名称空间。将xml文档封装成对象。

dom3:将xml文档封装成对象。

 

只要是标记型文档,DOM这种技术都可以对其进行操作。

 

常见的标记型文档:html  xml

 

DOM技术是如何操作标记型文档的呢?

在操作标记型文档前,须对其进行解析。

 

DOM解析方式:

按照标签的层次关系,将标记型文档解析成一棵DOM树。并将树中的内容都封装成节点对象。

 

DOM解析方式的好处:可以对树中的节点进行操作,如:增删改查

 

弊端:标记型文档会加载进内存,那么内存中有了一个对应的DOM树。如果文档过大,就相对消耗资源。对于   大型文档可以使用SAX这种解析。

 

SAX解析方式:基于事件驱动的解析。获取数据的速度很快,但是不能对标签进行增删改

 

标签之间存在着层次关系:

html

| -- head

| -- title

| -- base

| -- link

| -- meta

| -- style

| -- script

| -- body

| -- div

| -- form

| -- input

| -- select

| -- span

| -- a

| -- table

| -- tbody

| -- tr

| -- td

| -- th

| -- dl

| -- dt

| -- dd

 

通过这个标签层次,可以形象的看作是一个树型结构,那么也称标记型文档,加载进内存的是一颗DOM

这些标签以及标签的数据都是这棵树上的节点

 

节点类型:

标签型节点:类型 1

属性节点:类型 2

文本型节点:类型 3

注释型节点:类型 8

docment :类型 

 

注意:标签之间存在空行时,会出现一个空白的文本节点,在获取节点时一定要注意。

 

节点关系:

获取父节点:parentNode

获取子节点:childNodes :直接子节点,注意返回的是一个节点对象集合。

兄弟节点

上一个兄弟节点:previousSibling

下一个兄弟节点:nextSibling 

如:document.parentNode;

 

如何获取节点对象?

可以通过节点的层次关系完成。也可以通过document对象完成。

注意:这些返回的都是其调用节点下的。也就是在调用节点内部查找相应的值。

    1getElementById :通过id属性值获取对应的节点对象,如果有多个相同的id值,则获取到的就是第一个id值所属对象。

    例:

  function getElement()
  {	
  	var divobj = document.getElementById("divid"); 	//通过id 值获取该节点对象
  	//获取其属性
  	var name = divobj.nodeName;
  	var type = divobj.nodeType;
  	var value = divobj.nodeValue;
   }
  
  <div id="divid" >
  	我是一排数据
  </div>

2getElementsByName:通过标签的name属性值获取对象,返回的一堆对象,其实是一个对象数组。   

 

3getElementsByTagName:即没有id也没有name时,可以通过标签名来获取节点对象,返回的是一堆对 象,其实是一个对象数组。大多容器型标签都具备该方法。

 

节点操作:

1,增加

一:创建所要增加的节点

如:文本节点  var  TextNode = document.createTextNode(这是一个文本节点);

按键节点  var ButNode = document.createElement(input);

  ButNode.type = button;

  ButNode.value = 一个新的按钮;

 

二:获取须要增加到的节点对象

如:<div id=div_1>节点下  var DivNode = document.getElementById(div_1);

 

三:将节点添加到指定节点下

如:DivNode.appendChild(TextNode);

 

注:使用容器标签属性 innerHTML 增加(这种方法使用比较多),这个属性可以设置html文本

如:

var DivNode = document.getElementById(div_1);

DivNode.innerHTML = HEHEHEHEH;  

DivNode.innerHTML =  < input  type = button  value= 我是按钮   />;  

DivNode.innerHTML =  <a  href = http://www.baidu.com>我是超链接</a> ;  

注:这个增加,会覆盖原来的,只会显示一个。

 

2,删除

一:找到要删除的节点。

如:var DivNode = document.getElementById(dIv_2);

二:删除该节点。

使用节点的removeNode方法删除  DivNode.removeNode(true);  //ture  表示删除该节点下的所有子节点

 

一般使用 removeChild方法,删除节点

先获取父节点,然后在用父节点的方法删除子节点

DivNode.parentNode.removeChild(DivNode);

 

3,修改

使用replaceNode进行替换

    var DivNode_1 = document.getElementById(div_1);

    var DivNode_3 = document.getElementById(div_3);

 

DivNode_3.replaceNode(DivNode_1);

 

建议使用replaceChild方法

DivNode_3.parentNode.replaceChild(DivNode_1,DivNode_3);

 

注:克隆节点  如 var copy = DivNode_3.cloneNode(treu);

 

DHTML

是多个技术的综合体,叫做动态html ,由 html  css  dom  javascript 组成。

 

html :提供标签,并将数据进行封装。

dom :将标签型文档以及文档中的所有内容进行解析,并封装成对象。

例:

css :负责标签中数据的样式。

javascript :将html css、 dom三个进行融合,通过程序设计方式来完成动态效果的操作。

 

dhtml+xmlHttpRequest  =  ajax


  < script  type = “text/javascript” >
  function demo()
  {
  var  obj =  document.getElementById(“divid”);  //封装div 标签,通过相同id值
  alert(obj.tagName);
  alert(obj.innerText);
  obj.innerText = “kkkkk”;
  }
  < /script >
  
  < div  id =  “divid”>
  hahahahaha
  < / div>

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值