15JavaScript DOM 操作全攻略!5 大核心技巧 + 避坑指南,小白秒变实战高手!

目录

【创建节点】使用document.write()创建节点

innerHTML更换元素内容(包括文字、标签)

innerHTML和innerText的区别

【创建节点】使用字符串拼接方式创建节点

【创建节点】createElement创建节点

js不用获取id也能操作对象


非 VIP 用户可前往公众号“前端基地”进行免费阅读,文章链接如下:

15JavaScript DOM 操作全攻略!5 大核心技巧 + 避坑指南,小白秒变实战高手!

【创建节点】使用document.write()创建节点


        在 HTML DOM 操作中,document.write()是创建节点的一种方式,它可以将字符串形式的 HTML 代码直接写入页面。不过,这种方式在使用时有严格的限制和注意事项。

        示例代码如下:

<body>
    <button>按钮</button>
    <h1>一级标题</h1>
    <script>
        /*
             创建节点的第一种方式: document.write()
        */
        // 只能在页面加载的时候使用
        document.write('<h2 title="我是h2标签">二级标题</h2>');
        // 当页面加载后,再使用会干掉所有的dom
        var btn=document.getElementById('btn');
        btn.onclick=function(){
            document.write('<h3 title="我是h3标签">三级标题</h3>');
        }
    </script>
</body>

        分析:页面加载时使用:document.write()最适合在页面加载过程中使用。例如,在<script>标签中直接调用document.write(),它会将传入的 HTML 字符串插入到当前<script>标签所在的位置。如上述代码中,在页面加载时执行document.write('<h2 title=”我是h2标签”>二级标题</h2>');,最终页面结构如下:

<button>按钮</button>
<h1>一级标题</h1>
<script>…</script>
<h2 title="我是h2标签">二级标题</h2>

        运行结果:

        页面加载后慎用:当页面加载完成后,如果再次使用document.write(),它会清空当前页面的所有 DOM 内容,并将新传入的 HTML 字符串作为新的页面内容。例如,在按钮点击事件中执行document.write('<h3 title=”我是h3标签”>三级标题</h3>');,页面最终只会显示新写入的<h3>标签,原有的<button>和<h1>标签都会消失,最终页面结构变为:

<h3 title="我是h3标签">三级标题</h3>

        运行结果:

innerHTML更换元素内容(包括文字、标签)


        在 HTML DOM 操作中,innerHTML属性是修改元素内容的常用方法,它能够快速设置或返回元素开始标签与结束标签之间的所有 HTML 内容,无论是纯文本、HTML 标签,还是两者的组合,都能轻松处理。

        语法:

元素对象(事件源).innerHTML='新的HTML内容'

        通过将目标元素的innerHTML属性赋值为新的HTML字符串,即可替换元素原有的内容;直接读取innerHTML属性,则能获取元素当前包含的HTML内容。

        示例代码如下:

<body>
    <div><h1>box</h1></div>
    <script>
        var box=document.getElementById('box');
        console.log(box.innerHTML);
        box.innerHTML='<p>我是innerHTML设置的文本内容</p>'
    </script>
</body>

        分析:在上述代码中,首先通过document.getElementById('box')获取页面中的<div>元素,随后使用console.log(box.innerHTML)打印其原始内容,最后将新的 HTML 字符串赋值给innerHTML属性,实现元素内容的替换。执行后,页面中的<div>元素将显示为新设置的红色<p>标签内容。

innerHTML和innerText的区别


        innerHTML 和 innerText 的区别在于:当元素内仅包含纯文本内容时,innerHTML 和 innerText 都会直接显示该文本内容。然而,当元素内包含 HTML 标签时,innerHTML 会解析并渲染这些 HTML 标签,以呈现出相应的页面效果;而 innerText 则会将 HTML 标签作为普通文本内容原样输出。

关于 innerText 的详细介绍,可参考《1.5.innerText 设置和获取元素对象的文本内容》。

【创建节点】使用字符串拼接方式创建节点


        以下代码实现了通过字符串拼接的方式创建节点,并将这些节点添加到页面中,同时为列表项添加了奇偶行不同背景色的样式,以及鼠标悬停时的样式效果。

        示例代码如下:

<body>
    <div class="box">
    </div>
    <script>
        var box=document.getElementById('box');
        var arr=['学科','语文','分数',80];
        var str='<ul>';
        for(var i=0;i<10;i++){
            str+='<li>';
            for(var j=0;j<arr.length;j++){
                str+='<span>'+arr[j]+'</span>'; 
            }
            str+='</li>';
        }
        str+='</ul>';
        box.innerHTML=str;
        var lis=document.getElementById('news').children;
        for(var i=0;i<lis.length;i++){
            if(i%2==0){
                lis[i].style.backgroundColor='#efefef';
            }else{
                lis[i].style.backgroundColor='#fff';
            }
            // 动态添加属性
            lis[i].index=i;
            // 鼠标移入
            lis[i].onmouseover=function(){
                if(this.index%2==0){
                    this.style.backgroundColor='skyblue';
                }else{
                    this.style.backgroundColor='pink';
                }
            }
            // 鼠标移出
            lis[i].onmouseout=function(){
                if(this.index%2==0){
                    this.style.backgroundColor='#efefef';
                }else{
                    this.style.backgroundColor='#fff';
                }
            }
        }
    </script>
</body>

        运行结果:

【创建节点】createElement创建节点


        以下代码使用document.createElement 方法创建了HTML元素节点,并将这些节点添加到页面中,同时为列表项添加了奇偶行不同背景色的样式,以及鼠标悬停时的样式效果。

        示例代码如下:

<body>
    <div class="box">
    </div>
    <script>
        var box=document.getElementById('box');
        var arr=['学科','语文','分数',80];
        var ul=document.createElement('ul');
        ul.id='news';
        for(var i=0;i<10;i++){
            var li=document.createElement('li');
            for(var j=0;j<arr.length;j++){
                var span=document.createElement('span');
                span.innerHTML=arr[j];
                li.appendChild(span);
            }
            ul.appendChild(li);
        }
        box.appendChild(ul);
        var lis=document.getElementById('news').children;
        for(var i=0;i<lis.length;i++){
            if(i%2==0){
                lis[i].style.backgroundColor='#efefef';
            }else{
                lis[i].style.backgroundColor='#fff';
            }
            // 动态添加属性
            lis[i].index=i;
            // 鼠标移入
            lis[i].onmouseover=function(){
                if(this.index%2==0){
                    this.style.backgroundColor='skyblue';
                }else{
                    this.style.backgroundColor='pink';
                }
            }
            // 鼠标移出
            lis[i].onmouseout=function(){
                if(this.index%2==0){
                    this.style.backgroundColor='#efefef';
                }else{
                    this.style.backgroundColor='#fff';
                }
            }
        }
    </script>
</body>

js不用获取id也能操作对象


        在 JavaScript 严格模式下,直接使用未声明的变量(如代码中的 btn)会导致 ReferenceError 错误。因为没有通过 var、let 或 const 声明 btn 变量,也没有使用 window.btn 这种挂载在全局对象上的方式,所以代码会报错。

        不过在非严格模式下,JavaScript会自动将 btn 作为全局变量隐式声明(这是 JavaScript 的一种 “奇特” 行为,不推荐使用),此时代码可以运行。

        示例代码如下:

<body>
    <button>js不用获取id也能操作对象</button>
    <script>
        btn.onclick=function(){
            console.log('js不用获取id也能操作对象');
        }
    </script>
</body>

© 版权声明
THE END
如果内容对您有所帮助,就支持一下吧!
点赞0 分享
评论 抢沙发

请登录后发表评论

    暂无评论内容