美文网首页
JavaScript基础 DOM对象3 增、删

JavaScript基础 DOM对象3 增、删

作者: 0说 | 来源:发表于2018-02-13 01:33 被阅读0次

创建元素节点
document.createElement( '节点名' );

var oA = document.createElement( 'a' ); //这里创建一个元素节点存放在内存中,还没放进DOM树

增:
父级.appendChild( 新子节点 ) 父级的最后一个添加一个节点

var oA = document.createElement( 'a' );
oBox.appendChild( oA );

向父级的最后一个添加一个节点


image.png

添加内容

       <script type="text/javascript">
        var oBox = document.getElementsByClassName('box')[0];
        var oA = document.createElement('a');
        oA.innerHTML ='我是a标签';//往oA里添加内容
        oA.href = 'http://www.baidu.com';

        注意:在写入DOM树之前把标签属性内容先设置好,再写入,这样HTML只绘制一次
        oBox.appendChild(oA);
        console.log( oA );
    </script>

父级.insertBefore( 新节点,当前某一个子节点)
往第二个参数的子节点前,添加新节点

<script>
  var oBox = document.getElementsByClassName( 'box' )[0];
  var oA = document.createElement( 'a' );
  oBox.insertBefore( oA  , oBox.chilren[1]  );
</script>
image.png

如果父级没有子元素的时候

 <div class="box"></div>
    <script type="text/javascript">
        var oBox = document.getElementsByClassName('box')[0];
        var oA = document.createElement('a');
        oA.innerHTML ='我是a标签';//往oA里添加内容
        oA.href = 'http://www.baidu.com';
        oBox.insertBefore( oA , oBox.children[1] );
    </script>

也可以正常添加,不用在乎子节点有没有存在这样写都可以在第一个添加

特殊图片添加

var oImg = new Image();
oImg.src = '1.jpg';//添加路径
oDiv.appendChild( oImg );

children动态获取

<body>
    <div class="box"></div>
    <script type="text/javascript">
        var oBox = document.getElementsByClassName('box')[0];
        var boxChild = oBox.children; //获取oBox下的子元素,存放在boxChild
        oA.innerHTML ='我是a标签';//往oA里添加内容
        oA.href = 'http://www.baidu.com';
        oBox.insertBefore( oA , boxChild[0] );//往boxChild的第一个前写入oA
        console.log( boxChild[0]); //打印出第一个
    </script>
</body>
image.png

说明children是动态属性;

createTextNode创建文本节点

var oDiv = document.getElementsByTagName( 'div' )[0];
var oTxt = document.createTextNode( '我是文本节点' );
oDiv.appendChild( oTxt );
image.png

createDocumentFragment()创建的是文档碎片、整合多个碎片中介

<body>
    <div></div>
  <script>
       var oDiv = document.getElmentsBytagName( 'div' )[0],
             oA = document.createElement( 'a' ),
             oP = document.createElement( 'p' ),
             oTxt = document.createTextNode( '这是文本节点' ),
             obj = document.createDocumentFragment();//创建文档碎片
             oA.innerHTML = '我是a标签';
             oP.innerHTML = '我是p标签';

             oDiv.appendChild( oA );
             oDiv.appendChild( oP );
             oDiv.appendChild( oTxt );
              用这种方法页面会重绘三次

             obj.appendChild( oA );
             obj.appendChild( oP );
             obj.appendChild( oTxt );
             创建文档碎片 把上面要写入的放到obj里
             oDiv.appendChild( obj );
            统一放到oDiv里,页面只绘制一次
  </script>
</body>

父级.removeChild( 子节点 ) 删除子节点

<body>
    <div class="wrap1">
        <div class="wrap">
            <div class="box">
                <p>你好的</p>
                <a href="">我是A标签</a>
            </div>
        </div>
    </div>
    <script type="text/javascript">
        var oBox = document.getElementsByClassName( 'box' )[0];
        console.log( oBox );
        oBox.removeChild( oBox.children[1]);//删掉a标签
    </script>
</body>

注意:只能通过父级才能杀掉子节点;
如果要自己删自己只有找到父级,再来删掉

<body>
    <div class="wrap1">
        <div class="wrap">
            <div class="box">
                <p>你好的</p>
                <a href="">我是A标签</a>
            </div>
        </div>
    </div>
    <script type="text/javascript">
        var oBox = document.getElementsByClassName( 'box' )[0];


        var x = oBox.parentNode.removeChild( oBox );
      //oBox.parentNode先找到父级再来删掉removeChild( oBox )

      console.log( oBox ) //打印出上面获取的
    </script>
</body>

oBox.parentNode.removeChild( oBox );
oBox.parentNode先找到父级再来删掉removeChild( oBox )
console.log( oBox ) //打印出上面获取的
说明:oBox还在!存放在内存里,没有被删掉

replaceChild()替换
父级.replaceChild( 哪个要替换 , 替换的对象 )

    <ul>
        <li>123</li>
    </ul>
    <script type="text/javascript">
        var oUl = document.getElementsByTagName('ul')[0];
        var oLi = document.createElement('li');
            oLi.innerHTML = '你好明天';
        oUl.replaceChild( oLi,oUl.children[0] );

克隆cloneNode()

1、cloneNode( true ) 克隆元素下的所有内容
2、cloneNode( false ) 只克隆标签 (默认)
true只有克隆标签里行内样式,行内事件
js里定义事件 属性都没办法克隆

    <div>你昌好的是归了的是进
        <p>你好</p>
    </div>
    <script type="text/javascript">
        var oDiv = document.getElementsByTagName('div')[0],
              oDiv.erguo = '2214'; //js里自定义属性克隆不了
        var oAll = oDiv.cloneNode( true );
        console.log( oAll );
    <div>你昌好的是归了的是进
        <p>你好</p>
    </div>
    <script type="text/javascript">
        var oDiv = document.getElementsByTagName('div')[0],
            oAll = oDiv.cloneNode( false );
        console.log( oAll );

补充

innerHTML与createElement比较
在IE下 innerHTML性能秒杀createElement
其他浏览器innerHTML高一点点

如果选择哪个呢?

    <div class="wrap"></div>
    <script type="text/javascript">
        var oDiv = document.getElementsByTagName('div')[0],
            oA = document.createElement('a');
            oA.innerHTML = '点击跳转百度';
            oA.href = 'http://www.baidu.com';
            oDiv.appendChild( oA );
    </script>
可以用innerHTML来代替

    <script type="text/javascript">
        var oDiv = document.getElementsByTagName('div')[0];
        oDiv.innerHTML = '<a href = 'http://www.baidu.com' >点击跳转百度</a>';
    </script>

要添加的标签没有添加事件时候用innerHTML

添加事件的时候

var oDiv = document.getElementsByTagName('div')[0],
           oA = document.createElement('a');
           oA.innerHTML = '点击跳转百度';
           oA.href = 'http://www.baidu.com';
           oA.onclick = function (){
               alert(1);
           }
           oDiv.appendChild( oA );

innerHTML写法
<script type="text/javascript">
       var oDiv = document.getElementsByTagName('div')[0];
       oDiv.innerHTML = '<a href = "http://www.baidu.com" >点击跳转百度</a>';
       var oA = document.getElementsByTagName('a')[0];
           oA.onclick = function () {
               alert(1);
           }
   </script>

添加事件的时候用createElement

相关文章

网友评论

      本文标题:JavaScript基础 DOM对象3 增、删

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