JS DOM创建节点

DOM节点操作之增删改查

document.write() 可以向文档中添加节点

但是有个致命问题,会把文档原有的节点全部清空

因此不推荐使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>

</head>
<body>

    这是原有的节点哦~

    <script>

        myReady(function(){
            document.write("这是document.write创建的节点!");
        });

    </script>
</body>
</html>

create系列方法:

document.createElement  创建元素节点

document.createTextNode 创建文本节点

document.createComment 创建注释节点

document.createDocumentFragment 创建文档片段节点

.appendChild() 追加子元素

document.body.insertBefore(要插入的节点,插入的位置);  在指定位置前插入节点

.firstChild  第一个子元素节点

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>

    <ul id="list"></ul>

    <script>
        myReady(function(){
            var comment=document.createComment("这是注释呀");
            var ul=document.getElementById("list");
            var li=null;
            var fragment=document.createDocumentFragment();
            for(var i=0;i<3;i++){
                li=document.createElement("li");
                li.appendChild(document.createTextNode("item"+(i+1)));
                fragment.appendChild(li);
            }
            ul.appendChild(fragment);
            document.body.insertBefore(comment,ul);

        });
    </script>
</body>
</html>

在IE6-8中,createElement可以用来创建文档中本不存在的元素

可以用来做html5shiv,用于低版本IE兼容html标签元素

.split() 字符串转数组

IE条件编译语句 /*@cc_on  @*/   里面的内容只有IE会执行,其余浏览器会按照注释来处理,不会执行,可以用于区别是否是IE浏览器

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
        article{
            font-size:14px;
            color:orange;
        }
    </style>
    <script src="DomReady.js"></script>
    <script>
        myReady(function(){
            (function(){
                if(!/*@[email protected]*/0) return;
                //所有html5新增元素
                var elements="abbr, article, aside, audio, canvas, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video".split(", ");
                //获取长度
                var len=elements.length;
                //循环添加这些元素
                while(len--){
                    document.createElement(elements[i]);
                }
            })();//匿名函数自执行,可以避免污染全局

        });
    </script>
</head>
<body>

<article>这是html5元素</article>

</body>
</html>

以上是错误的,html5shiv代码不能写在domReady中,因为创建元素需要在dom树加载之前完成

以下是正确写法

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
        article{
            font-size:14px;
            color:orange;
        }
    </style>
    <script src="DomReady.js"></script>
    <script>
        (function(){
            if(!/*@[email protected]*/0) return;
            //所有html5新增元素
            var elements="abbr, article, aside, audio, canvas, datalist, details, dialog, eventsource, figure, footer, header, hgroup, mark, menu, meter, nav, output, progress, section, time, video".split(", ");
            //获取长度
            var len=elements.length;
            //循环添加这些元素
            while(len--){
                document.createElement(elements[len]);
            }
        })();//匿名函数自执行,可以避免污染全局

    </script>
</head>
<body>

<article>这是html5元素</article>

</body>
</html>

高效创建节点的方法

innerHTML

outerHTML

innerText

outerText

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>

    <ul id="list"></ul>
    <script>
        var ul=document.getElementById("list");
        var str="<li>item1</li>"+
                "<li>item2</li>"+
                "<li>item3</li>";
        ul.innerHTML=str;

    </script>
</body>
</html>

使用innerHTML的限制:

IE6~8中,要求字符串的最左边不能出现空格,否则会被移除

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
        div{
            border:2px solid pink;
            background:#abcdef;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>

    <div id="box"></div>
    <script>
        var box=document.getElementById("box");
        var str="  这是一句话哦~";
        box.innerHTML=str;

    </script>
</body>
</html>

大多数浏览器来说,使用该方法添加的script脚本是无效的,不会执行

script属于无作用域元素,使用innerHTML添加时会被要求删除

因此要求script必须在有作用域的元素之后,首选<input type="hidden">

并且需要给script添加defer属性

这种做法在IE6-8是有效的,在IE高版本以及其他浏览器中依旧无效

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
        div{
            border:2px solid pink;
            background:#abcdef;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>

    <div id="box"></div>
    <script>
        var box=document.getElementById("box");
        var str="<input type=‘hidden‘><script defer>alert(‘hello~‘);<\/script>";
        box.innerHTML=str;

    </script>
</body>
</html>

不能单独创建style  meta  link等元素

除非也是放置在有作用域的元素之后,如<input type="hidden">

并且只在IE6-8中有效

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>
    <div id="box"></div>
    <script>
        var box=document.getElementById("box");
        var str="<input type=‘hidden‘><style>body{background:#abcdef;}<\/style>";
        box.innerHTML=str;

    </script>
</body>
</html>

innerHTML和outerHTML的区别:

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>
    <div id="box"><b>喵喵喵</b></div>
    <script>
        console.log(box.innerHTML);//<b>喵喵喵</b>
        console.log(box.outerHTML);//<div id="box"><b>喵喵喵</b></div>

    </script>
</body>
</html>

innerText  提取元素中所有的文本节点

只有文本

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>
    <div id="box">开始~<b>喵喵喵~</b>结束~</div>
    <br>
    <div id="new1"></div>
    <div id="new2"></div>
    <script>
        console.log(box.innerText);//开始~喵喵喵~结束~
        console.log(box.innerHTML);//开始~<b>喵喵喵~</b>结束~

        var new1=document.getElementById("new1");
        new1.innerHTML="<b>通过innerHTML添加的</b>";
        var new2=document.getElementById("new2");
        new2.innerText="<b>通过innerText添加的</b>";
    </script>
</body>
</html>

低版本firefox不支持innerText

使用:textContent 兼容

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>
    <div id="box">开始~<b>喵喵喵~</b>结束~</div>

    <script>
        //获取innerText
        function getInnerText(ele){
            return (typeof ele.textContent=="string")?ele.textContent:ele.innerText;
        }
        //设置innerText
        function setInnerText(ele,text){
            if(typeof ele.textContent=="string"){
                ele.textContent=text;
            }else{
                ele.innerText=text;
            }
        }

        console.log(getInnerText(box));
        setInnerText(box,"这是通过setInnerText设置的文本哦")
    </script>
</body>
</html>

outerText在获取时和innerText相同

在设置时会替换掉本身的元素,因此不建议使用

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        body{
            width:100%;
            height:100%;
        }
    </style>
    <script src="DomReady.js"></script>
</head>
<body>
    <div id="box">开始~<b>喵喵喵~</b>结束~</div>

    <script>
        console.log(box.outerText);
        box.outerText="这是通过outerText设置的文本哦";
    </script>
</body>
</html>

原文地址:https://www.cnblogs.com/chenyingying0/p/12269808.html

时间: 2024-10-01 02:58:09

JS DOM创建节点的相关文章

DOM——创建节点及节点属性与内部插入append()和appendTo()

创建节点及节点属性与内部插入append()和appendTo() 1   创建流程 创建节点(常见的元素.属性和文本) 添加节点的一些属性 加入到文档中 2   流程中涉及的方法 创建元素document,creat 设置属性setAttrilbute 添加文本innerHTML 加入文档appendChild 3   创建节点时注意:每一个元素节点都必须单独创建,节点是属性需要单独设置,而且设置的接口不是很统一,添加到指定的元素位置不灵活,浏览器兼容问题处理 4   创建元素节点常见的是直接

JS Dom节点操作demo!

通过黑马课程的学习,在这里分享一个js Dom中节点操作的小练习 需求:使用js创建一个4*3的表格table. onload = function(){ function c(tagName){ return document.createElement(tagName); } var table = c('table'); var tbody = c('tbody'); table.appendChild(tbody); for(var i = 0;i<4;i++){ var tr = c(

jQuery_DOM学习之------创建节点及节点属性

DOM创建节点及节点属性 一.创建新的节点并添加到dom中 dom 节点创建的过程(创建节点<元素.属性.文本等>.添加节点的属性.加入到文档中) jQuery创建元素节点的方法: 创建元素节点: $("<div></div>"): 创建文本节点: $("<div>直接将文本的内容添加进去</div>"): 创建节点并给节点添加属性:var div = $("<div class='righ

js—— DOM中的node类型(二)

DOM中的node类型 DOM1中定义了一个Node接口,这个接口在js中作为Node类型实现,除IE外,其他浏览器都可以访问到这个类型.Js中所以节点类型都继承自Node类型,节点类型都享有共同的·基本属性和方法. 每个节点都有nodeType属性,表明节点类型,由12个常量表示,任何节点必居其一. Node.ELEMENT_NODE 1 元素节点 Node.ATTRIBUTE_NODE 2 属性节点 Node.TEXT_NODE 3 文本节点 ...... 常用的为以上三种,还有其他类型可去

JS DOM操作(创建、遍历、获取、操作、删除节点)

创建节点 <!DOCTYPE html> <html lang="zh-CN"> <head> <meta charset="utf-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=devic

JS——DOM小结(二)操作节点

在DOM总结(一)中已经说明节点有三类:元素节点.属性节点.文本节点这三个节点拥有相同的三个属性,而且可以通过元素节点可以获得当前节点的父节点和子节点.同时可以通过DOM对节点进行增.删.改.查.首先来总体的整理一些思路然后一个一个的进行理解. 图中节点的三个属性nodeName.nodeType.nodeValue可以获得节点的名称.类型.值,三种类型的节点中元素节点具有其特殊性,即可以通过当前的元素节点获得该节点的同级节点.子节点.父节点.同级节点. 通过实例看看效果 在HTML中 <bod

js创建节点及其属性

<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8"> <title>创建节点及其属性</title></head><style> #listShow>li ul{ display: none; } #listShow>li>a{ background:#ccc; } li{ list-s

DOM创建和删除节点

一.创建节点 3步 1.创建空元素对象: var newElem=document.createElement("标签名"); 例如:var a=document.createElement("a");//<a></a> 2.设置必要属性 newElem.属性名="值"; newElem.innerHTML="文本"; 例如:a.href="http://tmooc.cn";a.in

js中创建html标签、加入select下默认的option的value和text、删除select元素节点下全部的OPTION节点

<pre name="code" class="java"> jsp 中的下拉框标签: <s:select name="sjx" id="sjx" list="sjxList" listKey="BM" listValue="MC" size="20" cssStyle="width:100%;height:70px;