DOM 文档对象模型
2016-01-15 19:17
274 查看
1.基本概念
* 文档:标记型文档 (HTML/XML)* 对象:封装属性和行为(方法)
* 模型:共性特征的体现
2.DOM解析HTML
2.1 通过DOM的方法,把HTML全部(元素(标签)、文本、属性)都封装成了对象。<span id="spanId">文本</span>
2.2 DOM想要操作标记型文档先解析。(解析器)
* DOM解析HTML(浏览器就可以HTML)
2.3 浏览器DOM就可以解析HTML,如何解析示例如下图:类似于树形
3.DHTML不是一种编程语言,包含HTML,ccs,DOM,js
html :封装数据。 <span>展示给用户的数据</span>css :设置样式(显示效果)
dom :操作HTML(解析HTML)
js :提供逻辑(判断语句,循环语句)
4. Document:代表整个文档,重要方法如下
4.1获取标签对象的重要方法:
getElementById("id的值"); 通过元素的id的属性获取元素(标签)对象。(推荐)
例如写id时尽量写成唯一(如果有多个相同id的对象,会获取顺序上的第一个对象): <span id="spanfirst"></span>
getElementsByName("name属性值"); 通过名称获取元素对象的集合(返回数组)
getElementsByTagName("标签名称"); 通过标签名称获取元素对象的集合(返回数组)
获取元素element下的所有子节点(*****)(如果用document.getElementsByTagName(); 获取的是所有document的所有子结点,包括空格键)
ul.getElementsByTagName();
write("文本的内容(html的标签)") 把文本内容写到浏览器上。 如:document.write( "i am lyt"+ "<br/>");
示例代码:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <input type="text" id="inputid1" value="张三"><br> <input type="text" name="username" value="zhangsan"><br> <input type="text" name="username" value="zhaosi"><br> <input type="text" name="username" value="debang"><br> </body> <script type="text/javascript"> var input1 = document.getElementById("inputid1"); //alert(input1.value); inputs var input2 = document.getElementsByName("username"); //alert(input2.length); for(var i=0; i<input2.length; i++){ var inputs = input2[i]; //alert(inputs.value); } //通过标签名获取,如input标签 var input3 = document.getElementsByTagName("input"); alert(input3.length); </script> </html>
4.2创造标签对象的方法:
createElement("元素名称"); 创建元素对象createTextNode("文本内容") 创建文本对象
appendChild("子节点") 添加子节点
示例:在无序列表<ul>中添加<li>条目,代码如下:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <ul> <li>北京</li> <li>上海</li> <li>广州</li> </ul> </body> <script type="text/javascript"> //创建元素对象 var li = document.createElement("li"); //创建文本对象 var text = document.createTextNode("深圳"); //把文本对象添加到元素对象下 li.appendChild(text); //获取ul var ul = document.getElementsByTagName("ul")[0]; //把元素对象添加到ul下面,作为子结点。 ul.appendChild(li); </script> </html>
5.元素对象: Element对象
5.1获取元素对象后的对对象操作的方法:
getAttribute("属性名称"); 获取属性的值setAttribute("属性名称","属性的值"); 设置或者修改属性的值
removeAttribute("属性名称"); 删除属性
获取元素element下的所有子节点(*****)(如果用document.getElementsByTagName(); 获取的是所有document的所有子结点,包括空格键)
ul.getElementsByTagName();
代码如下:
<span style="color:#000000;"><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <input type="text" id="nameID" value="zhangsan"> <ul id="ulID"> <li>北京</li> <li>上海</li> <li>广州</li> </ul> </body> <script type="text/javascript"> //var input1 = document.getElementById("nameID"); //alert(input1.value); //input1.setAttribute("value","louyuting"); //alert(input1.value); //var name = input1.getAttribute("value"); //alert(name); //input1.removeAttribute("value"); //alert(input1.getAttribute("value")); //============================================ var ul = document.getElementById("ulID"); //var lis = ul.childNodes; //alert(lis.length);//获得是7 var lis2 = ul.getElementsByTagName("li"); alert(lis2.length);//获得是3 </script> </html></span>
6.Node:每个节点的对象(包括元素,属性和文本都存在下面)
6.1主要有三个对象(包括元素,属性和文本都存在下面三个对象)
nodeName :节点名称nodeType :节点类型
nodeValue :节点的值
parentNode 获取父节点(永远是一个元素节点)
6.2 区别点:
IE6-8 IE9-11 Chrome FireFoxfirstChild 第一个节点 firstElementChild?第一个节点
lastChild最后一个节点 lastElementChild 最后一个节点
nextSibling 下一同级节点 nextElementSibling?下一同级节点
previousSibling 上一同级节点 previousElementSibling?上一同级节点
<ul>
<li>北京</li>
</ul>
* 如果通过ul获取北京的子节点,使用是 ul.firstElementChild; 获取北京的子节点(IE9-11 Chrome FireFox)
* 但是如果IE6-8,需要使用firstChild;
<span id="spanId">
文本内容
</span>
* 使用span的标签获取span中间的文本内容(也是对象),需要使用firstChild;(不管是什么浏览器)
6. 3node结点方法
hasChildNodes() 检查是否包含子节点 返回布尔类型hasAttributes() 检查是否包含属性 返回布尔类型
appendChild(node) 父节点调用,在末尾添加子节点
insertBefore(new,old) 父节点调用,在指定节点之前添加子节点
replaceChild(new,old) 父节点调用,替换节点
removeChild(node) 父节点调用,删除节点
cloneNode(boolean) 不是父节点调用,复制节点
* boolean :如果是true,复制子节点
:如果是false,不复制子节点,默认是false
6.4代码示例:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <input type="text" id="nameID" value="zhangsan"> <br> <span id="spanID"> 我是span区域 </span> <ul id="ulId"> <li>北京</li> <li id="sh" >上海</li> <li>广州</li> </ul> <ul> <li>小时代1</li> <li id="xsd2">小时代2</li> <li>小时代3</li> </ul> <hr/> <button id="btnId"> 我是按钮 </button> <span id="spanId2"></span> </body> <script type="text/javascript"> //var input = document.getElementById("nameID"); //alert(input.nodeName); // INPUT //alert(input.nodeType); // 1 //alert(input.nodeValue); // null //var attr = input.getAttributeNode("type"); //alert(attr.nodeName); // type //alert(attr.nodeType); // 2 //alert(attr.nodeValue); // text //var span = document.getElementById("spanID"); //var text = span.firstChild; //alert(text.nodeName); // #text //alert(text.nodeType); // 3 //alert(text.nodeValue); // 我是span的区域 //var ul = document.getElementById("ulId"); //var li = ul.firstElementChild; //alert(li.nodeType); //1 //点击上海,用小时代2替换 /** document.getElementById("sh").onclick = function(){ //alert(this.id);//this指代上海这个<li>,所以输出的id是:sh //方法一 //var xsd2 = document.getElementById("xsd2"); //var sh = document.getElementById("sh"); //var ul = sh.parentNode; //ul.replaceChild(xsd2,sh); //方法二 var ul = this.parentNode; var xsd2 = document.getElementById("xsd2"); ul.replaceChild(xsd2,this); } */ //删除结点 document.getElementById("sh").onclick = function(){ //写法一: //this.parentNode.removeChild(this); //写法二 var sh = document.getElementById("sh"); var ul = sh.parentNode; ul.removeChild(sh); } //复制button按钮,添加到span的中间 var btn = document.getElementById("btnId"); var newbtn = btn.cloneNode(true); var span2 = document.getElementById("spanId2"); span2.appendChild(newbtn); </script> </html>
7. innerHTML:获取和设置文本内容。
7.1innerHTML属性
获取文本内容设置文本内容
7.2 代码演示:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <title>Insert title here</title> </head> <body> <span id="spanID"> 我是span区域 </span> <span id="spanID2"></span> <h3 >获取焦点事件</h3> 输入姓名:<input type="text" name="username" id="inputId" onfocus="run()" onblur="outrun()"> <span id="spanID3"></span> <br> 输入密码:<input type="password" name="password"/> </body> <script type="text/javascript"> //获取文本内容 //var span = document.getElementById("spanID"); //alert(span.innerHTML); //设置文本内容 var span2 = document.getElementById("spanID2"); span2.innerHTML = "<br/> <font color='red'>这是spanid2的区域 </font>" ; function run(){ var span3 = document.getElementById("spanID3"); span3.innerHTML = "只能输入字母ABC"; } function outrun(){ //获取用户输入的姓名 //ajax,用户姓名传入后台校对;并返回结果 var span3 = document.getElementById("spanID3"); span3.innerHTML = "用户名已存在"; } </script> </html>
8. 事件介绍:
事件:onclick 点击事件
onload 加载事件
onfocus 获取焦点事件
onblur 失去焦点事件
鼠标移动的事件
onmousemove
onmouseout
onmouseover
* 鼠标点击事件(*****)
onclick 单击
ondblclick 双击
* 加载和卸载
* onload(*****) 加载
* onunload 卸载
* 获取焦点和失去焦点(*****)
* onfocus 获取焦点
* onblur 失去焦点
* 键盘
* onkeyup 按下抬起
* 改变事件(*****)
* onchange
* 控制表单的提交(*****)
onsubmit
相关文章推荐
- UI课程(TabBarController)
- 续续 Codeforces 613 B Skills
- 七牛关于Android SDK jar包依赖情况总结
- 一、WebGL入门的开始
- Java类、方法与接口
- Xcode开发技巧之Code Snippets Library(代码片段库)
- 几种数据保存方式
- 贪吃蛇
- 怎样改动SVN的地址
- SWD与JTAG的区别
- 汉语输入法无选择列表
- 瀑布流
- UINavigationController从右边缘也可滑动返回
- HDFS的体系结构
- Codeforces Round #339 (Div. 2) A. Link/Cut Tree 水题
- android.intent.category.DEFAULT
- 奔三技术男:聊聊从华为裸辞后的一点感悟
- 【HDU】 1298 T9
- Java提高学习之Object(4)
- Docker容器详细学习教程