JavaScript——DOM属性之innerHTML和insertBefore

今天我们来看看DOM当中的innerHTMLinsertBefore。今天是用的样例仍然与上次一样,样例代码如下:

<body>
    <p>喜欢的城市</p>
    <ul id="city">
        <li id="bj" name="beijing">北京</li>
        <li>上海</li>
        <li>广州</li>
        <li>深圳</li>
    </ul>
    <p>喜欢的语言</p>
    <ul id="language">
        <li id="js">javascript</li>
        <li>python</li>
        <li>c++</li>
        <li>java</li>
</body>

基本概念

innerHTML

innerHTML属性用于获取或设置元素的HTML内容。

如果想要获取某个元素内部的HTML结构时,可以使用 innerHTML 属性。这会返回该元素内部的HTML字符串,包括所有的子元素和它们的HTML内容。

同样地,你也可以使用 innerHTML 属性来设置某个元素内部的HTML内容。当你这样做时,原有的子元素会被新的HTML内容替换。

insertBefore

insertBefore允许将一个节点(newNode)插入到父节点(parentNode)中的指定子节点(referenceNode)之前。如果referenceNodeparentNode的第一个子节点,那么newNode将被插入为parentNode的第一个子节点。如果referenceNodenull,或者不是一个子节点,那么newNode将被添加到parentNode的子节点列表的末尾。


使用

innerHTML

获取内部的HTML结构

如果我们想要使用innerHTML,我们只需要直接使用“点”记性调用即可,代码和效果如下:

<script type = "text/javascript">
    window.onload = function(){
        var citynode = document.getElementById("city");
        alert(citynode.innerHTML);
    }
</script>

此时我们就获得了元素内部的HTML结构。

交换内部元素

如果我们想要交换两个内部的html元素,我们可以使用一个中间变量来完成:

<script type = "text/javascript">
    window.onload = function(){
        var citynode = document.getElementById("city");
        //呼唤city和lánguage节点的内容
        var tempNode = citynode.innerHTML;
        var languageNode = document.getElementById("language");
        citynode.innerHTML = languageNode.innerHTML;
        languageNode.innerHTML = tempNode;
    }
</script>

InsertBefore

基本使用-插入到前面

该方法除了插入,还有移动节点的功能,具体代码示例和效果示意如下:

<script type = "text/javascript">
    window.onload = function(){
        var cityNode = document.getElementById("city");
        var bjNode = document.getElementById("bj");
        var rlNode = document.getElementById("js");
        cityNode.insertBefore(rlNode, bjNode);
    }
</script>

插入到后面

如果我想要向后插入,我们需要使用进行判断,当父节点存在时则进行追加,如果父节点不存在就进行向前插入。

<script type = "text/javascript">
    window.onload = function(){
        var city = document.getElementById("city");
        var bjNode = document.getElementById("bj");
        var jsNode = document.getElementById("js");
        var refNode = document.getElementById("sh");
        insertAfter(jsNode,refNode);
    }
    function insertAfter(newNode, refNode){
        var parentNode = refNode.parentNode;
        if(parentNode){
            var lastNode = parentNode.lastChild
            if(refNode == lastNode){
                parentNode.appendChild(newNode);
            }
            else{
                var nextNode = refNode.nextsibling;
                parentNode.insertBefore(newNode,nextNode)
            }
        }
    }
</script>

### JavaScript `innerHTML` 属性详解 #### 一、定义与基本用法 `innerHTML` 是一个非常强大的属性,允许开发者获取或设置 HTML 元素内部的 HTML 或 XML 标记。它不仅能够读取元素内的现有内容,还可以修改这些内容,甚至完全替换掉旧有的子节点。 对于如下所示的一个简单 HTML 片段: ```html <div id="example"> <p>这是一个段落。</p> </div> ``` 可以通过以下方式访问并更改其内容: ```javascript var divElement = document.getElementById("example"); console.log(divElement.innerHTML); // 输出 "<p>这是一个段落。</p>" divElement.innerHTML += '<span>, 添加一些新文本。</span>'; // 此时 #example 的内容变为:<p>这是一个段落。</p><span>, 添加一些新文本。</span> ``` #### 二、注意事项 当使用 `innerHTML` 设置新的内容时需谨慎处理潜在的安全隐患,比如防止跨站脚本攻击 (XSS)[^1]。此外,在频繁更新 DOM 结构时可能会导致性能下降,因为每次调用都会触发重新渲染流程。 为了安全起见,建议仅在必要情况下才直接操作 `innerHTML`;而对于只需要改变纯文本的情况,则应优先考虑使用其他更合适的 API 如 `textContent` 来代替[^3]。 #### 三、实例展示 这里给出一段完整的代码片段来说明如何利用 `innerHTML` 动态构建列表项: ```html <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF-8"> <title>InnerHTML Example</title> <style> ul { list-style-type:none;padding-left:0;} li{margin-bottom:.5em;background:#f9f9f9;border-radius:4px;padding:.75em;} button{display:block;margin-top:1rem;} </style> </head> <body> <h2>待办事项清单</h2> <ul id="todoList"></ul> <input type="text" placeholder="输入新任务..." id="newTaskInput"/> <button onclick="addTodo()">添加任务</button> <script> function addTodo() { const inputField = document.getElementById('newTaskInput'); let inputValue = inputField.value.trim(); if (!inputValue) return; const todoItemHtml = `<li>${inputValue}</li>`; document.getElementById('todoList').innerHTML += todoItemHtml; inputField.value = ''; } </script> </body> </html> ``` 此示例展示了如何创建一个新的待办事项条目,并将其追加到现有的无序列表中。每当点击按钮时,就会执行一次 `addTodo()` 函数,从而向页面上增加一条记录。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值