javaScript DOM操作技术

在一般情况下我们操作DOM都比较简单明了,尤其是jquery出来之后,我们会发现操作DOM变得如此简单,但是也会有许多隐藏的坑,所以有时候操作DOM也并非想象中那么简单;

简单而常用的操作:

访问节点

document.getElementById()    根据Id获取元素节点

document.getElementsByName()    根据name获取元素节点

document.getElementsByClassName()  
 根据class获取元素节点

<html>
<head>
<title>createElement() Example</title>
</head>
<body >
 <div id="div1">
        <p id="p1" class="class1">
            我是第一个P</p>
        <p name="p2" class="class2">
            我是第二个P</p>
    </div>
</body>
<script type="text/javascript">
    var id=document.getElementById("p1").innerHTML;
	alert(id);
	var name=document.getElementsByName("p2");
	alert(name);
	 var node = document.getElementsByClassName("class1");
            alert(node[0].innerHTML);
</script>
</html>

创建

最常用到的几个方法是

createDocumentFragment()--创建文档碎片节点

createElement(tagname)--创建标签名为tagname的元素

createTextNode(text)--创建包含文本text的文本节点

createElement()--创建根节点

createTextNode()--创建textNode节点

appendChild()--追加节点内容

<html>
<head>
<title>createElement() Example</title>
<script type="text/javascript">
function createMessage() {
var oP = document.createElement("p");
var oText = document.createTextNode("Hello World!");
oP.appendChild(oText);
document.body.appendChild(oP);
}
</script>
</head>
<body onload="createMessage()">
</body>
</html>

动态脚本:

现在我们的开发中引入脚本一般都是会事先写一个src特性包含外部文件,另一种方式就是整个HTML页面里面包含script代码,这里要说的是另外一种动态脚本,指的是页面加载时不存在,但将来的某一个时刻通过修改DOM动态添加脚本;

function loadScript(url){
  var script=document.createElement("script");
  script.type="text/javascript";
<span style="white-space:pre">	</span>script.src=url;
<span style="white-space:pre">	</span>document.body.appendChild(script);
<span style="white-space:pre">	</span>}

动态样式:

这里要说的动态样式和动态脚本很像,样式也可以通过src指定文件,也可以包含,所以也可以使用我们的动态样式去加载;

function loadCss(url){
	var link=document.createElement("link");
	link.rel="stylesheet";
	link.type="text/css";
	link.href=rul;
	var head=document.getElementsByTagName("head")[0];
	head.appendChild(link);
}

操作表格

<table>元素是HTML中最复杂的结构之一。要想创建表格,一般都必须涉及表示表格行,单元格,表头等方面的标签。

下面演示一下用DOM来创建HTML表格。

<script type="text/javascript">
var table=document.createElement("table");
table.border=1;
table.width="100%";

//创建tbody
var tbody=document.createElement("tbody");
table.appendChild(tbody);

//创建第一行
var row1=document.createElement("tr");
tbody.appendChild(row1);
var cell_1=document.createElement("td");
cell_1.appendChild(document.createTextNode("cell 1,1"));
row1.appendChild(cell_1);
var cell_2=document.createElement("td");
cell_2.appendChild(document.createTextNode("cell 2,1"));
row1.appendChild(cell_2);

//创建第二行
var row2=document.createElement("tr");
tbody.appendChild(row2);
var cel2_1=document.createElement("td");
cel2_1.appendChild(document.createTextNode("cell 1,2"));
row2.appendChild(cel2_1);
var cel2_2=document.createElement("td");
cel2_2.appendChild(document.createTextNode("cell 2,2"));
row2.appendChild(cel2_2);

//将表格添加到文档主体中
document.body.appendChild(table);
</script> 

很原始的创建DOM表格方法,而且没有什么技巧;

还好JS提供了HTMLDOM方法

<script type="text/javascript">
Var Table=Document.Createelement("Table");
Table.Border=1;
Table.Width="100%";

//创建tbody
Var Tbody=Document.Createelement("Tbody");
Table.Appendchild(Tbody);

//创建第一行
Tbody.Insertrow(0);
Tbody.Rows[0].Insertcell(0);
Tbody.Rows[0].Cells[0].Appendchild(Document.Createtextnode("Cell 1,1"));
Tbody.Rows[0].Insertcell(1);
Tbody.Rows[0].Cells[1].Appendchild(Document.Createtextnode("Cell 2,1"));

//将表格添加到文档主体
Document.Body.Appendchild(Table);
</script> 

NodeList

理解NodeList及namedNodeMap和HTMLCollection是从整体上透彻理解DOM的关键所在。这三个集合都动态的保存着最新最准确的信息每当文档结构发生变化时,它们都会得到更新,所有NodeList对象都是在访问DOM文档时实时运行的查询。例如下面这段代码会死循环;

<script type="text/javascript">
 var divs=document.getElementsByTagName("div"),
 i,
 div;
 for(i=0;i<divs.length;i++){
	div=document.createElement("div");
	document.body.appendChild(div);
 }
</script> 

第一行会取得文档中所有div元素的HTMLCollection。由于这个集合是动态的,因此只要有新DIV添加到元素中,这个集合就会得到更加,而与此同时我们的divs.length也会增加,这就意味着我们的i和divs.length永远不会相等;

如果我们想循环创建div的话,最好先创建一个临时变量保存div的长度;

<script type="text/javascript">
 var divs=document.getElementsByTagName("div"),
 i,
 leb,
 div;
 for(i=0,len=divs.length;i<len;i++){
	div=document.createElement("div");
	document.body.appendChild(div);
 }
</script> 

总结:

1.最基本的节点类型是Node,用于抽象的标示文档中一个独立的部分,所有的其他类型都继承自Node。

2.document类型表示整个文档,是一组分层的根节点。

3.Element节点表示文档中的所有HTML元素或XML元素,可以用来操作这些元素的内容和特性。

4.另外还有一些节点类型,分别表示文本内存,注释,文档类型,CDATA区域和文档片段。

在我们日常的开发中,有很多JS框架供我们选择,比如jquery和angularjs这些都对DOM进行了很好的封装,不过我们还是要有必要去学习一下DOM这样才能有助于我们以后的开发和成长;

时间: 2024-08-03 09:54:28

javaScript DOM操作技术的相关文章

《JAVASCRIPT高级程序设计》节点层次和DOM操作技术

DOM可以将任何HTML和XML文档描绘成一个由多层次节点构成的结构.节点分为几种不同的类型,每种类型分别表示文档中不同的信息,每种类型都继承与Node接口,因此都共同享有一些属性和方法,同时,也拥有各自的特点.数据和方法.另外,每个节点都与其余节点存在一些关系. 一.节点树 以下面代码为例,先简单介绍一下: <html> <head> <title>Sample Page</title> </head> <body> <p&g

JavaScript DOM

BOM是浏览器对象模型 DOM是文档对象模型动态HTML 节点层次 DOM 描绘了一个层次化的节点树,下面的代码就是我们平时所见到的最基本的层次结构 <html> <head> <title>标题</title> </head> <body> <ui> <a>a</a> <a>b</a> </ui> </body> </html> 注:&l

javascript——DOM

<!DOCTYPE html> <html> <head lang="en"> <meta charset="UTF-8"> <title>Node类型</title> </head> <body> <div id="items"> <li class="item">1</li> <li c

第10章 DOM (2 DOM操作技术)

10.2 DOM操作技术 10.2.1 动态脚本 使用<script>元素可以向页面中插入JavaScript 代码,一种方式是通过其src 特性包含外部文件,另一种方式就是用这个元素本身来包含代码.而这一节要讨论的动态脚本,指的是在页面加载时不存在,但将来的某一时刻通过修改DOM 动态添加的脚本.跟操作HTML 元素一样,创建动态脚本也有两种方式:插入外部文件和直接插入JavaScript 代码. 动态加载的外部JavaScript 文件能够立即运行,比如下面的<script>元

Javascript Dom编程艺术(第2版)读书笔记

Javascript Dom编程艺术这本书我看的是第2版的,真心觉得这本书不错,它将DOM编程的一些基本原则,及如何让Javascript代码在浏览器不支持的情况下,或浏览器支持了Javascript但用户禁用它的情况下做到平衡退化,让最基本的操作仍能顺利完成,以及如何让结构与样式分享做到真正的渐近增强叙述得很清楚,也很容易理解接受.我也是看了这本书之后,才对代码优化,结构,行为,样式有了进一步的加深理解. Javascript Dom编程艺术(第2版)读书笔记,布布扣,bubuko.com

《JavaScript+DOM变成艺术》的摘要(二)

//DOM: //对象是一种独立的数据集合,与某个特定对象相关联的变量被称为这个对象的属性,通过某个特定对象可以为之调用的函数被称为这个对象的方法 // //4个非常实用的DOM方法: //检索特定元素节点的方法: //document.getElementById:与document相关联的函数,在脚本代码里,函数后面必须跟有一组圆括号 //document.getElementsByTagName:返回的是一个数组 //,setAttribute,getAttribute alert(doc

JavaScript DOM编程艺术第一章:JavaScript简史

本系列的博客是由本人在阅读<JavaScript DOM编程艺术>一书过程中做的总结.前面的偏理论部分都是书中原话,觉得有必要记录下来,方便自己翻阅,也希望能为读到本博客的人提供一些帮助,所以 如果您也看过这本书,希望不要喷小的"抄袭",其实我也懒得敲这些文字也想简单粗暴地上代码,但是只有实践没有理论不容易自己理解,为避免误导,该"抄"的地方还是要"抄"的,哈哈~~ 一.JavaScript的起源 JavaScript是Netscap

前端学习系列之JavaScript DOM

JavaScript DOM简介 介绍 文件对象模型(Document Object Model,简称DOM),是W3C组织推荐的处理可扩展标志语言的标准编程接口.DOM编程: DOM 是关于如何获取.修改.添加或删除 HTML 元素的标准 HTML DOM节点树 通过 HTML DOM,树中的所有节点均可通过 JavaScript 进行访问.所有 HTML 元素(节点)均可被修改,也可以创建或删除节点 理解几个概念,html标签没有父辈,没有兄弟,所以html标签为根标签.head标签是htm

Javascript DOM 编程艺术读书笔记16/04/01

愚人节快乐 开始用webstorm了,随着学习深入,代码越来越长,因为不借助ide还真是挺难的 今天发现了一个严重的误区,text和textNode是完全不同的两个概念,之前没有特别注意,写代码很容易跳过createTextNode直接用parentNode.appendChild(text) 单独拎出来晒一晒,以后引以为戒 Javascript DOM 编程艺术读书笔记16/04/01