05.DOM
Posted Cutelady0927
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了05.DOM相关的知识,希望对你有一定的参考价值。
DOM基础
什么是DOM 标签元素节点
浏览器支持情况 火狐支持最好 谷歌其次 ie最差 尤其是ie6-8
DOM节点
节点分为:元素节点和文本节点 测试节点的类型用nodeType
nodeType 为3时是文本节点
nodeType 为1时是元素节点
childNodes 节点 不兼容要做判断 一般用children
children子节点只算第一层
parentNode父节点
<!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script> window.onload=function () { var aA=document.getElementsByTagName(\'a\'); for(var i=0;i<aA.length;i++) { aA[i].onclick=function () { this.parentNode.style.display=\'none\'; }; } }; </script> </head> <body> <ul id="ul1"> <li>dfasdf <a href="javascript:;">隐藏</a></li> <li>45346 <a href="javascript:;">隐藏</a></li> <li>fghfgcvn <a href="javascript:;">隐藏</a></li> <li>vcbxcvbc <a href="javascript:;">隐藏</a></li> <li>757465867 <a href="javascript:;">隐藏</a></li> </ul> </body> </html>
offsetParent
获取对应定位的父元素
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <style> #div1 {width:200px; height:200px; background:#CCC; margin:100px; } #div2 {width:100px; height:100px; background:red; position:absolute; left:50px; top:50px;} </style> <script> window.onload=function () { var oDiv2=document.getElementById(\'div2\'); alert(oDiv2.offsetParent);//弹出的是object HTMLBodyElement 因为div1没有设置相对定位,所以div2是相对body定位的 }; </script> </head> <body> <div id="div1"> <div id="div2"></div> </div> </body> </html>
首尾子节点 有兼容性问题
firstChild、firstElementChild
lastChild 、lastElementChild
兄弟节点 有兼容性问题
nextSibling、nextElementSibling
previousSibling、previousElementSibling
<script> window.onload=function () { var oUl=document.getElementById(\'ul1\'); //IE6-8 //oUl.firstChild.style.background=\'red\'; //高级浏览器 //oUl.firstElementChild.style.background=\'red\'; if(oUl.firstElementChild) { oUl.firstElementChild.style.background=\'red\'; } else { oUl.firstChild.style.background=\'red\'; } }; </script> <ul id="ul1"> <li>1</li> <li>2</li> <li>3</li> </ul>
元素属性操作
第一种:oDiv.style.display=“block”;
第二种:oDiv.style[“display”]=“block”;
第三种:Dom方式
DOM方式操作元素属性
获取:getAttribute(名称)
设置:setAttribute(名称, 值)
删除:removeAttribute(名称)
<script> window.onload=function () { var oTxt=document.getElementById(\'txt1\'); var oBtn=document.getElementById(\'btn1\'); oBtn.onclick=function () { //oTxt.value=\'123\'; //oTxt[\'value\']=\'123\'; oTxt.setAttribute(\'value\', \'123\'); }; }; </script> <input id="txt1" type="text" /> <input id="btn1" type="button" value="按钮" />
用className选择元素
如何用className选择元素
选出所有元素
通过className条件筛选
封装成函数
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script> function getByClass(oParent, sClass) { var aResult=[]; var aEle=oParent.getElementsByTagName(\'*\'); for(var i=0;i<aEle.length;i++) { if(aEle[i].className==sClass)//找到所有要找的class { aResult.push(aEle[i]);//放进数组里 } } return aResult; } window.onload=function () { var oUl=document.getElementById(\'ul1\'); var aBox=getByClass(oUl, \'box\'); for(var i=0;i<aBox.length;i++) { aBox[i].style.background=\'red\'; } }; </script> </head> <body> <ul id="ul1"> <li class="box"></li> <li class="box"></li> <li></li> <li></li> <li></li> <li class="box"></li> <li></li> </ul> </body> </html>
创建、插入和删除元素
createElement(标签名) 创建一个节点
appendChild(节点) 追加一个节点
插入元素 insertBefore(节点, 原有节点) 在已有元素前插入
例子:倒序插入li
删除DOM元素
removeChild(节点) 删除一个节点 例子:删除li
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script> window.onload=function () { var aA=document.getElementsByTagName(\'a\'); var oUl=document.getElementById(\'ul1\'); for(var i=0;i<aA.length;i++) { aA[i].onclick=function () { oUl.removeChild(this.parentNode); }; } }; </script> </head> <body> <ul id="ul1"> <li>asfasd <a href="javascript:;">删除</a></li> <li>5645 <a href="javascript:;">删除</a></li> <li>ghdfjgj <a href="javascript:;">删除</a></li> <li>mvbnmvnb <a href="javascript:;">删除</a></li> </ul> </body> </html>
串联例子
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script> window.onload=function () { var oBtn=document.getElementById(\'btn1\'); var oUl=document.getElementById(\'ul1\'); var oTxt=document.getElementById(\'txt1\'); oBtn.onclick=function () { var oLi=document.createElement(\'li\');//创建li var aLi=oUl.getElementsByTagName(\'li\'); oLi.innerHTML=oTxt.value; //父级.appendChild(子节点); //oUl.appendChild(oLi); if(aLi.length>0)//判断存不存在第一个节点 { oUl.insertBefore(oLi, aLi[0]);//存在插入之前元素的 前面 } else { oUl.appendChild(oLi);//不存在直接插入父元素 } }; }; </script> </head> <body> <input id="txt1" type="text"/> <input id="btn1" type="button" value="创建li"/> <ul id="ul1"> </ul> </body> </html>
文档碎片 文档碎片可以提高DOM操作性能(理论上) 文档碎片原理 document.createDocumentFragment()
<!DOCTYPE HTML> <html> <head> <meta charset="utf-8"> <title>无标题文档</title> <script> window.onload=function () { var oUl=document.getElementById(\'ul1\'); 05.DOM