美文网首页
Dom基础2

Dom基础2

作者: Monee121 | 来源:发表于2018-03-30 12:27 被阅读0次

DOM中级

  1. 创建元素 createElement、appendChild
  2. 添加元素的性能差异
  3. insertBefore方法及实例
  4. 删除元素:removeChild方法
  5. 文档碎片:document.createDocumentFragment()
    插一万个li,需要重绘一万次,用文档碎片,相当于先创建了一万个li,放了文档碎片,一起插入
  6. 性能测试方法
点击按钮创建li
<body>
<script>
window.onload = function(){
  var oBtn=document.getElementById('oBtn');
  var oUll=document.getElementById('oUl');
  
  oBtn.onclick=function(){
       var oLi=document.createElement('li'); //添加li元素
       oUll.appendChild(oLi);
  } 
}
</script>
<div>
<input type="button" id="oBtn" />
  <ul id="oUl">
    <li id="oLi">111</li>
  </ul>
</div>

</body>
创建li2:点击按钮把文本框的值加到li
<body>
<script>
window.onload = function(){
  var oTxt=document.getElementById('oTxt');
  var oBtn=document.getElementById('oBtn');
  var oUll=document.getElementById('oUl');
  
  oBtn.onclick=function(){
       var oLi=document.createElement('li');
       oLi.innerHTML=oTxt.value; //把文本框的值赋给创建的li
       oUll.appendChild(oLi);
  } 
}
</script>
<div>
<input type="text" id="oTxt" />
<input type="button" id="oBtn" />
  <ul id="oUl">
    <li id="oLi">111</li>
  </ul>
</div>

</body>
创建li3(insertBefor):点击按钮把文本框文本添加的所有文本之前,类似发微博
<script>
  // insertBefore(子节点,谁之前);
window.onload = function(){
  var oTxt=document.getElementById('oTxt');
  var oBtn=document.getElementById('oBtn');
  var oUll=document.getElementById('oUl');
 
  oBtn.onclick=function(){
       var oLi=document.createElement('li');
       var oAli=document.getElementsByTagName('li');//在原先li之前
       oLi.innerHTML=oTxt.value;
       oUll.insertBefore(oLi,oAli[0]);//原先li的第一个
  } 
}
</script>
<div>
<input type="text" id="oTxt" />
<input type="button" id="oBtn" />
  <ul id="oUl">
    <li>111</li>
  </ul>
</div>
解决上述没有insertBefore第二个参数时,用insertBefore插入元素的bug,方法是判断下,然后添加一个
<body>
<script>
  // insertBefore(子节点,谁之前);
window.onload = function(){
  var oTxt=document.getElementById('oTxt');
  var oBtn=document.getElementById('oBtn');
  var oUll=document.getElementById('oUl');
 
  oBtn.onclick=function(){
       var oLi=document.createElement('li');
       var oAli=document.getElementsByTagName('li');//在原先li之前,第二个参数
       oLi.innerHTML=oTxt.value;
        if(oAli.length==0){
            oUll.appendChild(oLi);
        }
        else{
            oUll.insertBefore(oLi,oAli[0]);//原先li的第一个
        }      
  } 
}
</script>
<div>
<input type="text" id="oTxt" />
<input type="button" id="oBtn" />
  <ul id="oUl">
   
  </ul>
</div>
删除li
<body>
<script>
window.onload = function(){
var oUl=document.getElementById('oUl');
var oA=document.getElementsByTagName('a');
var oLi=document.getElementsByTagName('li');
   
for(i=0;i<oLi.length;i++){
    
 oA[i].onclick=function(){ 
    oUl.removeChild(this.parentNode);
 } 
 
}
}
</script>
<ul id="oUl">
 <li>sdjfdkfj<a href="javascript:;">删除</a></li>
 <li>sdjfdkfj<a href="javascript:;">删除</a></li>
 <li>sdjfdkfj<a href="javascript:;">删除</a></li>
 <li>sdjfdkfj<a href="javascript:;">删除</a></li>
</ul>
</body>
文档碎片插入100000个li,理论上提高Dom操作性能
<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>
原始写法
<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 i=0;
        
        for(i=0;i<100000;i++)
        {
            var oLi=document.createElement('li');
            
            oUl.appendChild(oLi);
        }
        
        alert(new Date().getTime()-iStart);
    }
}
</script>
</head>

<body>
<input id="btn1" type="button" value="普通"/>
<ul id="ul1">
</ul>
</body>

相关文章

  • JavaScript 高级程序设计(第12章 DOM2和DOM3

    第12章 DOM2和DOM3 DOM2 级核心(DOM Level 2 Core):在 1 级核心基础上构建,为节...

  • Dom基础2

    DOM中级 创建元素 createElement、appendChild 添加元素的性能差异 insertBefo...

  • 19.DOM 进阶

    学习要点: 1.DOM 类型2.DOM 扩展3.DOM 操作内容 DOM 自身存在很多类型,在 DOM 基础课程中...

  • 十八

    DOM2和DOM3DOM1级主要定义的是HTML和XML文档的低层结构。DOM2和DOM3级则在这个结构的基础上引...

  • vuejs基础学习总结

    准备开始 vue基础 (1).历史介绍 (2).前端框架与库的区别? jquery 库 -> DOM(操作DOM)...

  • DOM基础知识

    DOM基础知识 1、DOM?页面操作 2、浏览器的兼容性?IE、FF、Chrom 3、DOM节点 1)childN...

  • per-courseDOM介绍

    DOM 文档对象模型 D 表示文档,DOM的物质基础O 表示对象,DOM的思想基础M 表示模型,DOM的方法基础...

  • JavaScript的基础组成部分

    JavaScript的基础组成部分 (1)BOM 内置对象总结: window的主要方法: 2、DOM DOM是一...

  • DOM基础整理 - 2

    1 输出流 document.write(); 2 改变HTML内容 document.getElementByI...

  • 渲染函数&JSX

    1.基础 render函数提供javascript完全编程能力 2.节点,树以及虚拟DOM 虚拟DOM:vue通过...

网友评论

      本文标题:Dom基础2

      本文链接:https://www.haomeiwen.com/subject/woobcftx.html