Appearance
3.11 DOM
3.11.1基本概念
每个载入浏览器的HTML文档都会成为Document对象。
Document对象使我们可以从脚本中对 HTML 页面中的所有元素进行访问。
Document对象是Window对象的一部分
当浏览器打开一个HTML文档时,浏览器解析HTML文档的标记,并创建表示这些标记的对象,这些对象就是HTML文档对象。
文档对象即Document对象,指的是一回事。
3.11.2获取DOM常用方法
getElementById返回拥有指定 id 的第一个对象的引用。
js
var x=document.getElementById("id")getElementsByName返回拥有指定name的对象的集合。ie中只对表单元素中的name有效
js
var x=document.getElementsByName("name");getElementsByTagName返回带有指定标签名的对象集合。Ie8+
js
var x=document.getElementsByTagName("div")[0]getElementsByClassName返回文档中所有指定class的元素集合。
js
var x=document.getElementsByClassName("class")[0]querySelector返回指定元素节点的子树中匹配选择器的集合中的第一个元素,如果没有匹配返回null,Ie9+
js
var x=document.querySelectorAll(".example");querySelectorAll按文档顺序返回指定元素节点的子树中匹配选择器的元素集合,如果没有匹配返回空集合,Ie8+
js
var list=document.querySelectorAll(".example1,.example2");
var example1 = list[0]WARNING
querySelectorAll查找元素是非实时的,即不支持有动态添加元素情况下的查找
3.11.3操作DOM对象
在DOM中,Element对象表示HTML元素。
innerHTML设置或返回元素的内容。
js
element.innerHTML="hello word";tagName返回元素的标签名。id设置或返回元素的id。
js
element.idclassName设置或返回元素的class属性。title设置或返回元素的title属性。style设置或返回元素的style属性。
js
element.style.width="100px";
element.style.cssText="width:100px";TIP
- className
js
element.className="width:100px"- getComputedStyle
js
var element = querySelector.getElementById("test");
Window.getComputedStyle(element, false)["属性名"]
//兼容:
function getStyle(obj,attr){
if(window.getComputedStyle){
return window.getComputedStyle(obj,false)[attr];
}else{
return obj.currentStyle[attr];
}
}- getPropertyValue
js
var element = querySelector.getElementById("test");
window.getComputedStyle(element, null).getPropertyValue("CSS属性")getAttribute返回元素节点指定属性值的属性值。
js
a.getAttribute("target"); //_blacksetAttribute把指定属性设置或更改为指定值。removeAttribute从元素中移除指定属性。createElement创建一个元素(节点)。
js
var btn=document.createElement("BUTTON");appendChild向元素列表的末尾添加新的子节点。
js
document.body.appendChild(btn) //添加到body中.removeChild从元素中移除子节点。
js
ul.removeChild(li)insertBefore向元素添加新的子节点,作为第一个子节点。
js
ul.insertBefore(newItem1, newItem2);cloneNode元素克隆,(true)复制子元素,()不复制子元素
js
li.cloneNode(true)replaceChild替换元素中的子节点。
js
ul.insertBefore(newLi、, oldLi);write向文档写HTML表达式或JavaScript代码。
TIP
文档加载之后使用docunment.write()会覆盖原文档.
3.11.5DOM节点
HTML 文档中的所有内容都是节点。
整个文档是一个文档节点、每个 HTML 元素是元素节点、HTML 元素内的文本是文本节点
每个 HTML 属性是属性节点、注释是注释节点。
节点的属性:(名称、类型、值)
nodeName返回元素的名称。与tagName作用相同 文本节点的名称为:#text;文档节点的名称为:#document.nodeType返回元素的节点类型。
元素节点返回 1
属性节点返回 2
文本节点返回 3
nodeValue设置或返回元素值。
文本节点返回文本内容 属性节点返回属性值 元素节点无nodeValue
js
var x=document.getElementById("demo").childNodes[0].nodeValue;父子节点属性
parentNode返回元素的父节点。childNodes返回元素子节点的NodeList类似CSS中的子选择器(包括文本,标签,和回车,可以借助nodetype筛选)children返回元素的子元素,该属性只返回元素节点。firstChild(识别回车)和element.firstElementChild 返回元素的首个子元素。类似CSS中的:e:first-childlastChild(识别回车)和element.lastElementChild 返回元素的最后一个子元素。类似CSS中的:e:last-child
兄弟节点属性
previousSibling返回位于相同节点树层级的前一个元素(包括文本节点、注释节点即回车、换行、空格、文本等等)。previousElementSibling返回位于相同节点树层级的前一个元素。nextSibling返回位于相同节点树层级的后一个元素(包括文本节点、注释节点即回车、换行、空格、文本等等)。nextElementSibling返回位于相同节点树层级的后一个元素。
js
var x = document.getElementById("li").nextElementSibling.innerHTML;文件节点属性
attributes返回指定节点的属性集合,即NamedNodeMap。
html
<p id="demo" class="demo" onclick="myFunction()"></p>js
var x=document.getElementById("demo").attributes.length; //x=3 id/class/onclick