zoukankan      html  css  js  c++  java
  • js中的DOM节点----文本节点

    先看一段代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title>文本节点</title>
    </head>
    <body>
        
        <ul id="list1">
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    
        <ul id="list2"><li>1</li><li>2</li><li>3</li></ul>
    
        <script type="text/javascript">
            var list1=document.getElementById('list1');
            var list2=document.getElementById('list2');
    
            console.log('list1子节点',list1.childNodes.length);
            console.log('list2子节点',list2.childNodes.length);
        </script>
    </body>
    </html>

    上面的代码是输出list1和list2子节点个数,结果为:

    为什么会出现子节点个数不一样,就是因为存在文本节点,换句话说只要标签之间存在内容(包括空格)就会有文本节点

    写个例子实现文本节点的增删改

    <!DOCTYPE html>
    <html>
    <head>
        <title>文本节点</title>
    </head>
    <body>
    
        <ul id="list1">
            <li>1</li>
            <li>2</li>
            <li>3</li>
        </ul>
    
        <button id="add">插入</button>
        <button id="replace">替换</button>
        <button id="remove">删除</button>
    
        <script type="text/javascript">
            var lis=document.getElementsByTagName('li');
            var add=document.getElementById('add');
            var replace=document.getElementById('replace');
            var remove=document.getElementById('remove');
    
    
            //创建文本节点
            var text=document.createTextNode('Hello');
    
            function addText(){
                //给第一个li元素添加文本节点
                lis[0].appendChild(text)
            }
            function replaceText(){
                //替换第二个li元素文本节点
                lis[1].replaceChild(text,lis[1].firstChild)
            }
            function removeText(){
                //移除第三个li元素的文本节点
                lis[2].removeChild(lis[2].childNodes[0])
            }
            add.addEventListener('click',addText);
            replace.addEventListener('click',replaceText);
            remove.addEventListener('click',removeText);
            
        </script>
    </body>
    </html>

    运行界面:

    一般情况下每个元素只有一个文本子节点,有些情况下也可能包含多个文本子节点(例如创建多个文本节点并插入到同一元素中)。

    normalize():将多个相邻同胞文本节点合并成一个文本节点

    splitText():将一个文本节点分割成两个,传入一个分割位置,原文本节点将包含从开始到指定位置之间的内容,新文本节点包含剩下的文本

    实例代码:

    <!DOCTYPE html>
    <html>
    <head>
        <title>文本节点</title>
    </head>
    <body>
        <div id="text1"></div>
        <div id="text2"></div>
    <script type="text/javascript">    
        var text1=document.getElementById('text1');
        var text2=document.getElementById('text2');
        var textNode1=document.createTextNode('Hello');
        var textNode2=document.createTextNode('World');
        var textNode3=document.createTextNode('Miss you');
    
    //测试normalize()
        text1.appendChild(textNode1);
        text1.appendChild(textNode2);
        console.log('合并前文本节点个数:',text1.childNodes.length);
        text1.normalize();
        console.log('合并后文本节点个数:',text1.childNodes.length);
    
    
    //测试splitText()
        text2.appendChild(textNode3)
        var newNode=text2.firstChild.splitText(4);
        console.log(text2.firstChild.nodeValue);
        console.log(newNode.nodeValue);
        console.log(text2.childNodes.length);
    </script>
    </body>
    </html>

    测试结果:

  • 相关阅读:
    Redis面试题
    redis基本操作
    pwd命令和cd命令
    ls命令详解
    Python时间操作所相关
    Nginx
    网络相关知识
    LeetCode 刷题记录(6-10题)
    绕过校园网Web认证
    Java相关知识
  • 原文地址:https://www.cnblogs.com/xingguozhiming/p/8649120.html
Copyright © 2011-2022 走看看