DOM文档对象模型
一.节点
1.节点分类
元素类型 节点类型
-
element(元素) 1
//获取元素 var ele=document.getElementById("myImg"); console.log("Element: "+ele); console.log("nodeName: "+ele.nodeName); console.log("nodeValue:"+ele.nodeValue); console.log("nodeType: "+ele.nodeType); console.log("");
-
attr(属性) 2
//属性节点(通过元素节点获取属性节点) var attr=ele.getAttributeNode("src"); console.dir(attr); console.log("nodeName: "+attr.nodeName); console.log("nodevalue: "+attr.nodeValue); console.log("nodeType: "+attr.nodeType); console.log("");
-
text(文本) 3
//文本节点 var p=document.getElementById("myP"); var txtNode=p.firstChild; console.log(txtNode); console.dir(txtNode); console.log("nodeName: "+txtNode.nodeName); console.log("nodeValue: "+txtNode.nodeValue); console.log("nodeType: "+txtNode.nodeType); console.log("");
-
comment(注释) 8
//注释节点 var comment=document.body.firstChild; console.dir(comment); console.log("nodeName: "+comment.nodeName); console.log("nodeValue: "+comment.nodeValue); console.log("nodeType: "+comment.nodeType);
-
document(文档) 9
//文档节点 console.log(document); console.log(document.nodeName); console.log(document.nodeValue); console.log(document.nodeType);
2.属性
- nodeName(节点名字)
- nodeValue(节点值)
- nodeType(节点类型)
二.从HTML获取元素
1.通过ID
-
getElementById()
-
一个元素具有ID属性,会自动生成与之同名的全局变量
//如果一个元素设置了ID,系统会生成与id同名的全局变量 box01.style.backgroundColor="green";
-
IE9+ 所有的元素都有name属性
-
IE9- 个别元素有name属性
2.通过标签名
- getElementsByTagName()
- element.getElementsByTagName()
- document.images(所有img的引用)
- document.links(所有超链接的引用)
- document.anchors(所有锚点的引用)
- document.forms(所有表单的引用)
3.通过class类型(类名)
-
getElementsByClassName()
//通过class类型 var eles=document.getElementsByClassName("box"); console.log(eles); eles[3].style.backgroundColor="#ccc";
-
IE9+
-
element.getElementsByClassName()
4.通过选择器
-
document.querySelector()
var ele=document.querySelector(".box"); console.log(ele);
-
document.querySelectorAll()
//根据选择器 var eles=document.querySelectorAll(".box"); var eles=document.querySelectorAll("div"); // var eles=document.querySelectorAll("div[name='lili']"); // var eles=document.querySelectorAll("div:first-of-type"); console.log(eles);
-
element.querySelectorAll()
-
element.querySelector()
5.document.all
-
文档中所有的元素
console.log(document.all);
document.all它的自带可以判断是否是IE
if (document.all) {
console.log("啊,我是IE");
} else {
console.log("啊,我不是IE");
}
三.文档节点的结构
1.节点的关系
-
父节点 父元素
//父节点 console.log(ulEle.parentNode); console.log(ulEle.parentNode.parentNode);
-
子节点 子元素
var ulEle=document.queryselector("ul"); //子节点 console.log(ulEle.childNodes); console.log(ulEle.firstChild); console.log(ulEle.lastChild);
-
兄弟节点 兄弟元素
//兄弟节点 var li=document.querySelector("#myItem"); console.log(li.nextSibling); console.log(li.previousSibling);
-
祖先节点 祖先元素
-
后代节点 后代元素
2.节点相关属性
- parentNode(父节点)
- childNodes(所有子节点的集合)
- firstChild(第一个子节点)
- lastChild(最后一个子节点)
- nextSibling(下一个子节点)
- previousSibling(上一个子节点)
3.元素相关属性
-
parentElement(父元素)
-
大部分情况下 parentElement 等同于 parentNode
-
children(所有子元素的集合)
-
firstElementChild IE9+
-
lastElementChild IE9+
-
nextElementSibling IE9+
-
previousElementSibling IE9+
-
childElementCount 子元素的数量 IE9+
-
ownerDocument IE9+(返回元素所属的文档对象)
<script> var ulEle=document.querySelector("#myList"); //父元素 console.log(ulEle.parentElement); console.log(document.documentElement.parentNode); console.log(document.documentElement.parentElement); //子元素 console.log(ulEle.children); console.log(ulEle.firstElementChild); console.log(ulEle.childElementCount); console.log(ulEle.children.length); console.log(ulEle.ownerDocument); </script>
四、属性
1、内置属性
- js对象和html标签有映射关系
2、自定义属性
- getAttribute(attrname) 获取自定义或内置属性的值
- setAttribute(attrnane, value) 设置自定义或内置属性
- hasAttribute(attrname) 判断是否存在该属性
- removeAttribute() 移出自定义或内置的属性
3、H5新增的自定义属性操作操作
- HTML:
<tag data-attr="">
- JS : element.dataset.attr
4、把属性当做属性节点
- getAttributeNode(attrname)
五、元素的内容
1、作为HTML的元素内容
- innerHTML
- outerHTML
2、作为纯文本的元素内容
-
innerText 会忽略多余的空格
-
textContent IE9+
<div class="article"> <h1>悯农</h1> <p>锄禾日当午</p> <p>汗滴禾下土</p> <p>Number盘中餐</p> <p>粒粒皆辛苦</p> </div> <script> var div=document.querySelector("div"); console.log(div.innerHTML); console.log(div.outerHTML); console.log(div.innerText); console.log(div.textContent); </script>
3、作为Text节点操作(了解)
- 文本节点的方法
- appendData()向文本节点追加内容
- deleteData()删除文本节点的一部分内容
- insertData()向文本节点中插入内容
- replaceData()替换内容
- substringData()截取内容
- 创建文本节点
- document.createTextNode()
六、元素操作(节点)
1、创建元素
-
document.createElement(tagName)
function addImage(){ //创建元素 var newImage=document.createElement("img"); newImage.src="../images/4.jpg"; //给某个元素追加子节点 boxEle.appendChild(newImage); }
2、添加元素(给父元素添加子元素)
-
appendChild(node)
-
insertBefore(newNode, oldNode)
function insertImage(){ //创建元素 var newImage=document.createElement("img"); newImage.src="../images/4.jpg"; //插件的指定位置 boxEle.insertBefore(newImage,document.querySelector("#box img:nth-of-type(3)")); }
3、删除元素
-
removeChild(node)
function deleteImage(){ var imgs=document.querySelectorAll("#box img"); for(var i=0;i<imgs.length;i++){ if(imgs[i].className === "current"){ boxEle.removeChild(imgs[i]); } } }
4、替换元素
-
replaceChild(newNode, oldNode)
function replaceImage(){ var newImage=document.querySelector("#newImage"); var imgs=document.querySelectorAll("#box img"); for(var i=0;i<imgs.length;i++){ if(imgs[i].className === "current"){ boxEle.replaceChild(newImage.cloneNode(),imgs[i]); } } }
5、克隆节点
-
cloneNode(false)
//给img元素添加 单击事件 boxEle.onclick=function(ev){ var e=ev || window.event; if(e.target.nodeName.toLowerCase() === "img"){ e.target.classList.toggle("current"); } } document.body.appendChild(boxEle.cloneNode(true));
七、元素的尺寸大小
1、元素的位置
-
getBoundingClientRect()返回对象 包含位置信息 大小信息
console.log(boxEle.getBoundingClientRect().left); console.log(boxEle.getBoundingClientRect().top);
-
offsetLeft/offsetTop距离左边/上面的距离, 相对规则同 css 的定位
console.log(boxEle.offsetLeft); console.log(boxEle.offsetTop);
-
clientLeft/clientTop没卵用 就是边框宽
-
offsetParent得到第一定位的祖先元素
2、元素的尺寸
-
getBoundingClientRect()
console.log(boxEle.getBoundingClientRect().width); console.log(boxEle.getBoundingClientRect().height);
-
offsetWidth/offsetHeight
console.log(boxEle.offsetWidth); console.log(boxEle.offsetHeight);
-
clientWidth/clientHeight
-
scrollWidth/scrollHeight
-
getClientRects()
console.log(boxEle.getClientRects());
3、滚动距离
- scrollLeft
- scrollTop
八、docuemnt
1、属性
-
URL 只读
-
domain 获取域名只读
-
referrer 获取上一个页面的地址 只读
-
lastModified 文档的最后一次修改时间 只读
-
location 对location对象引用
-
title 文档标题
<script> console.log(document); console.log(document.URL);//只读 console.log(document.domain);//只读 console.log(document.referrer);//只读 console.log(document.lastModified);//只读 console.log(document.title); document.title="你有一条新消息" </script>
标题滚动
<script>
document.title="您有一条新消息【你家发大水了,您的电脑被冲走了】";
setInterval(function(){
document.title=document.title.substr(1)+document.title.charAt(0);
},300)
</script>
2、方法
- write()
- writinln()
九、表单DOM
1、Form元素
- submit()
- reset()
- elements
2、按钮(submit reset button)
- click()
- blur()
- focus()
3、单选/复选
- click()
- blur()
- focus()
4、文本(input textarea)
- blur()
- focus()
- select()
5、select
-
add() 新增选项
<body> <form action="http://www.so.com/s" name="myForm"> <input type="txt" name="wd"> <select name="" id=""> <option value="">1</option> <option value="">2</option> </select> <br> <textarea name="" id="" cols="30" rows="10"></textarea> </form> <button onclick="submitForm()" id="btn">提交</button> <button onclick="selectText()">选中</button> <script> console.log(document.myFom.elements); function submitForm(){ document.myForm.submit(); } function selectText(){ document.myForm.elements[2].select(); } document.myForm.elements[0].focus(); </script> </body>
十、HTML DOM
1、Select
- 属性options
- 方法add()
- 方法remove()
小实例
<head>
<meta charset="UTF-8">
<title>HTML DOM select/option</title>
<style>
select{
width: 120px;
height: 200px;
}
</style>
</head>
<body>
<select id="leftSelect" multiple>
<option>北京</option>
<option>上海</option>
<option>广州</option>
<option>深圳</option>
<option>天津</option>
<option>重庆</option>
<option>成都</option>
<option>武汉</option>
</select>
<button onclick="addOption()">添加</button>
<button onclick="deleteOption()">删除</button>
<button onclick="moveToRight()"> >> </button>
<select id="rightSelect" multiple></select>
<script>
var leftSelect=document.querySelector("#leftSelect");
var rightSelect=document.querySelector("#rightSelect");
function addOption(){
var newOption=new Option("南京");
leftSelect.add(newOption);
}
function deleteOption(){
for(var i=0;i<leftSelect.options.length;i++){
if(leftSelect.options[i].selected){
leftSelect.remove(i);
i--;
}
}
}
function moveToRight(){
for(var i=0;i<leftSelect.options.length;i++){
if(leftSelect.options[i].selected){
leftSelect.options[i].selected=false;
rightSelect.add(leftSelect.options[i]);
i--;
}
}
}
</script>
</body>
</html>
十一、Table
1、属性
- rows 行数组
- cells 单元格数组
2.方法
- createCaption()为表格创建一个 caption 元素。
- deleteCaption() 从表格删除 caption 元素以及其内容
- createTHead() 在表格中创建一个空的 tHead 元素
- deleteTHead()
- createTFoot() 在表格中创建一个空的 tFoot 元素
- deleteTFoot()
- insertRow() 添加一个tr
- deleteRow(index) 删除一行
十二、tr
1、属性
- rowIndex 返回该行在表中的位置
- cells 返回包含行中所有单元格的一个数组
2、方法
insertCell() 在一行中的指定位置插入一个空的 元素
deleteCell() 删除行中的指定的单元格
td th属性
- cellIndex 返回单元格在某行的单元格集合中的位置