学习笔记——DOM基础

一、DOM基础一

1、lDOM基础
A.什么是DOM
作用:可以帮助JS操作浏览器。
 
B.浏览器支持情况
FF:支持DOM1几DOM2
safari和chrome:支持大部分DOM1,小部分DOM2
IE:只支持部分DOM1
 
2、DOM节点
A.子结点
子结点只有一层
 
a)获取子节点:childNodes  
//childNodes的兼容性问题
<script>
window.onload=function(){
    oUl=document.getElementById('ul1');
    alert(oUl.childNodes.length);    //在ie下输出为3,火狐下输出为7
    oUl.childNodes[0].style.background='red';
};
</scritp>
<ul id="ul1">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

b)子结点类型:nodeType

文本结点:nodeType=3;

元素结点:nodeType=1;

//用nodeType解决childNodes的兼容性问题
<script>
window.onload=function(){
    oUl=document.getElementById('ul1');
    var i=0;
    for(i=0;i<oUl.childNodes.length;i++){
        if(oUl.childNodes[i].nodeType==1){    //判断是否是元素结点
            oUl.childNodes[i].style.background='red';
        }
    }
    oUl.childNodes[0].style.background='red';
};
</scritp>
<ul id="ul1">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>    
 
c)兼容版的获取子结点:children
是childNodes的兼容版,不存在兼容问题。
 
B.父结点
a)parentNode:获取元素结构上的父级。
•例子:点击链接,隐藏整个li
<script>
window.onload=fucntion(){
    var aA=document.getElementsByTagName('a');
    var i=0;
    for(i=0;i<aA.length;i++){
        aA[i].onclick=function(){
            this.parentNode.style.display='none';
        };
    }
    
};
</script>
<ul>
    <li>aaa<a href='javascript:;'>隐藏</a></li>
    <li>bbb<a href='javascript:;'>隐藏</a></li>
    <li>ccc<a href='javascript:;'>隐藏</a></li>
</ul>  

 

b)offsetParent:获取元素在定位上的父级。
•例子:获取元素在页面上的实际位置
<script>
oDiv1=document.getElementById('div1');
oDiv2=document.getElementById('div2');
oDiv2.onclick=fucntion(){
    alert(this.offsetParent.tagName)  //输出html
    //如果给div1的样式加上position:relative;或position:absolute;或position:fix;时:
    alert(this.offsetParent.id)    //输出div1
}
</script>

<div id="div1" style="width:100px; height:100px; background:red;">
    <div id="div2" sytle="width:100;height:100;background:yellow; position:absolute;left:100px; top:100px;">
    
    </div>
</div>
 
二、DOM基础二
1、DOM节点(2)
A.首尾子节点
有兼容性问题
 
a)首子结点
-ie、firefox:
–firstChild、firstElementChild
–lastChild 、lastElementChild
例子:
<script>
window.onload=function(){
  var oUl=document.getElementById('ul1');
   //ie 
   //oUl.firstChild.style.background='red';
  //FF
  //oUl.firstElementChild.style.background='red';
  var oFirst=oUl.firstElementChild||oUl.firstChild;
  oFirst.style.background='red';  
};
</script>
<ul id="ul1">
    <li>1</li>
    <li>2</li>
    <li>3</li>
</ul>

 

B.兄弟节点
b)有兼容性问题
-ie、firefox:
–nextSibling、nextElementSibling
–previousSibling、previousElementSibling

 

三、操纵元素属性

1.操纵元素的方法
A.第一种:oDiv.style.display=“block”;
B.第二种:oDiv.style[“display”]=“block”;
 
C.第三种:Dom方式
a)lDOM方式操作元素属性
•获取:getAttribute(名称)
•设置:setAttribute(名称, 值)

•删除:removeAttribute(名称)

 

四、DOM元素灵活查找

1、用className选择元素
A.如何用className选择元素
a)选出所有元素
b)通过className条件筛选
<script>
window.onload=function(){
    var oUl=document.getElementById('ul1');
    bar aLi=oUl.getElementsByTagName('li')

   for(i=0;i<aLi.length;i++){
     if(aLi[li].className=='box') {
        aLi[li].style.background='red'';  
     }
  }
};
</script>
<ul id=ul1>
<li></li>
<li class="box"></li>
<li class="box"></li>
<li></li>
<li class="box"></li>
<li></li>
</ul>

 

B.封装成函数

<script>
function getByClass(oParent,sClass){
    var aEle=oParent.getElementsByTagName('*');
    var aResult=[];
    var i=0;
    for(i=0;i<aEle.lenght;i++){
        if(aEle[i].className==sClass){
            aReult.push(aEle[i]);
        }
    }
}
window.onload=function(){
   var oUl=document.getElementById('ul1');
   var aBox=getByClass('oUl','box');
   var i=0;
   for(i=0;i<aBox.lenght;i++){
       aBox[i].style.background='red';
   }
};
</script>
<ul id="ul1">
    <li class='box'>1</li>
    <li>2</li>
    <li>3</li>
</ul>

 

五、创建、插入和删除元素

1.创建DOM元素
A.createElement(标签名)  创建一个节点
B.appendChild(节点)  追加一个节点,只能把元素插到最后。
•例子:为ul插入li
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript">
window.onload=function(){
    oTex=document.getElementById("text1");
    oBtn=document.getElementById("btn1");
    oUl=document.getElementById("ul1");
    oBtn.onclick=function(){
        oLi=document.createElement('li');    //创建一个结点
        oLi.innerHTML=oTex.value;
        oUl.appendChild(oLi);    //追加一个结点
    };
};
</script>
</head>

<body>
<input type="text" id="text1" />
<input type="button"  value="创建li" id="btn1"/>
<ul id="ul1">
    <li>test</li>
</ul>
</body>
</html>
 
2.插入元素
a)insertBefore(节点, 原有节点)  在已有元素前插入。在元素之前插入。
•例子:倒序插入li
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript">
window.onload=function(){
    oTex=document.getElementById("text1");
    oBtn=document.getElementById("btn1");
    oUl=document.getElementById("ul1");
    
    oBtn.onclick=function(){
        oLi=document.createElement('li');    //创建一个结点
        aLi=oUl.getElementsByTagName("li");
        oLi.innerHTML=oTex.value;
        if(aLi.length==0){
            oUl.appendChild(oLi);  //追加一个结点
        }
        else{
            oUl.insertBefore(oLi,aLi[0]);    //在某结点前插入一个结点
        }        
    };
};
</script>
</head>

<body>
<input type="text" id="text1" />
<input type="button"  value="创建li" id="btn1"/>
<ul id="ul1">
    
</ul>
</body>
</html>

 

3.删除DOM元素
a)removeChild(节点)  删除一个节点
•例子:删除li
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<title>Untitled Document</title>
<script type="text/javascript">
window.onload=function(){
    oUl=document.getElementById("ul1");
    aA=oUl.getElementsByTagName("a");
    var i=0;
    for(i=0;i<aA.length;i++){
        aA[i].onclick=function(){
            oUl.removeChild(this.parentNode);    
        }
    }
};
</script>
</head>

<body>
<ul id="ul1">
    <li>test0<a href="javascript:;">删除</a></li>
    <li>test1<a href="javascript:;">删除</a></li>
    <li>test2<a href="javascript:;">删除</a></li>
    <li>test3<a href="javascript:;">删除</a></li>
</ul>
</body>
</html>

4.文档碎片

A.文档碎片可以提高DOM操作性能(理论上)
B.文档碎片原理
a)document.createDocumentFragment()
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<style>
</style>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>无标题文档</title>
<script type="text/javascript">
window.onload=function ()
{
    var oBtn=document.getElementById('btn1');
    var oUl=document.getElementById('ul1');
    
    oBtn.onclick=function ()
    {
        var iStart=new Date().getTime();
        var oFrag=document.createDocumentFragment();
        var i=0;
        
        for(i=0;i<100000;i++)
        {
            var oLi=document.createElement('li');
            
            oFrag.appendChild(oLi);
        }
        
        oUl.appendChild(oFrag);
        
        alert(new Date().getTime()-iStart);
    }
}
</script>
</head>

<body>
<input id="btn1" type="button" value="碎片"/>
<ul id="ul1">
</ul>
</body>
</html>

 

posted @ 2012-10-19 07:17  穹天  阅读(303)  评论(0编辑  收藏  举报