Home >Web Front-end >JS Tutorial >JavaScript tutorial: detailed explanation of how to update, insert, and modify dom node instance code
Update
After getting a DOM node, we can update it.
You can directly modify the text of the node. There are two methods:
One is to modify the innerHTML attribute, this The method is very powerful. Not only can you modify the text content of a DOM node, you can also directly modify the subtree inside the DOM node through HTML fragments:
// 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置文本为abc: p.innerHTML = 'ABC'; // <p id="p-id">ABC</p> // 设置HTML: p.innerHTML = 'ABC <span style="color:red">RED</span> XYZ'; // <p>...</p>的内部结构已修改
Use## When #innerHTML, please pay attention to whether you need to write HTML. If the written string is obtained through the network, pay attention to character encoding to avoid XSS attacks. The second is to modify the
innerText or textContent attribute, so that the string can be automatically HTML-encoded to ensure that it cannot be set. Any HTML tag:
// 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置文本: p.innerText = '<script>alert("Hi")</script>'; // HTML被自动编码,无法设置一个<script>节点: // <p id="p-id"><script>alert("Hi")</script></p>The difference between the two is that when reading attributes,
innerText does not return hidden elements of text, while textContent returns all text. Also note that IEtextContent. Modifying CSS is also a frequently required operation. The
style attribute of the DOM node corresponds to all CSS and can be obtained or set directly. Because CSS allows names like font-size, but it is not a valid property name in JavaScript, it needs to be rewritten in JavaScript as camel case naming fontSize:
// 获取<p id="p-id">...</p> var p = document.getElementById('p-id'); // 设置CSS: p.style.color = '#ff0000'; p.style.fontSize = '20px'; p.style.paddingTop = '2em';
insert
If this DOM node is empty, for example,
e388a4556c0f65e1904146cc1a846bee94b3e26ee717c64999d7867364b1b4a3, then use innerHTML = '427924e0bc1c500e0479e017d951eadfchild54bdf357c58b8a65c66d7c19c8e4d114' can modify the content of the DOM node, which is equivalent to "inserting" a new DOM node. If the DOM node is not empty, you cannot do this, because
innerHTML will directly replace all the original child nodes. There are two ways to insert new nodes. One is to use
appendChild to add a child node to the last child node of the parent node. For example:
<!-- HTML结构 --> <p id="js">JavaScript</p> <p id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> </p>Add
6de4cee9b51ae144091be93786a2abe8JavaScript94b3e26ee717c64999d7867364b1b4a3 To the last item of e672fde323644dddb9191ec4d9b38dcf:
##
var js = document.getElementById('js'), list = document.getElementById('list'); list.appendChild(js);
<!-- HTML结构 --> <p id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> <p id="js">JavaScript</p> </p>
var list = document.getElementById('list'), haskell = document.createElement('p'); haskell.id = 'haskell'; haskell.innerText = 'Haskell'; list.appendChild(haskell);
<!-- HTML结构 --> <p id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> <p id="haskell">Haskell</p> </p>
c9ccee2e6ea535a969eb3f532ad9fe89 node and then adds it to 93f0f5c25f18dab9d176bd4f6de5d30e At the end of the node, a new CSS definition is dynamically added to the document:
var d = document.createElement('style'); d.setAttribute('type', 'text/css'); d.innerHTML = 'p { color: red }'; document.getElementsByTagName('head')[0].appendChild(d);
What if we want to insert the child node into the specified position? You can use
parentElement.insertBefore(newElement, referenceElement);, child nodes will be inserted before referenceElement. Still taking the above HTML as an example, assuming that we want to insert Haskell before Python:
<!-- HTML结构 --> <p id="list"> <p id="java">Java</p> <p id="python">Python</p> <p id="scheme">Scheme</p> </p>
var list = document.getElementById('list'), ref = document.getElementById('python'), haskell = document.createElement('p'); haskell.id = 'haskell'; haskell.innerText = 'Haskell'; list.insertBefore(haskell, ref);
<!-- HTML结构 --> <p id="list"> <p id="java">Java</p> <p id="haskell">Haskell</p> <p id="python">Python</p> <p id="scheme">Scheme</p> </p>
insertBeforeThe key point is to get a reference to a "reference child node". Many times, it is necessary to loop through all child nodes of a parent node, which can be achieved by iterating the children attribute:
var i, c, list = document.getElementById('list'); for (i = 0; i < list.children.length; i++) { c = list.children[i]; // 拿到第i个子节点 }
删除一个DOM节点就比插入要容易得多。 注意到删除后的节点虽然不在文档树中了,但其实它还在内存中,可以随时再次被添加到别的位置。 例如,对于如下HTML结构: 当我们用如下代码删除子节点时: 浏览器报错:parent.children[1]不是一个有效的节点。原因就在于,当e388a4556c0f65e1904146cc1a846beeFirst94b3e26ee717c64999d7867364b1b4a3节点被删除后,parent.children的节点数量已经从2变为了1,索引[1]已经不存在了。 因此,删除多个节点时,要注意children属性时刻都在变化。
要删除一个节点,首先要获得该节点本身以及它的父节点,然后,调用父节点的removeChild把自己删掉:// 拿到待删除节点:
var self = document.getElementById('to-be-removed');
// 拿到父节点:
var parent = self.parentElement;
// 删除:
var removed = parent.removeChild(self);
removed === self; // true
当你遍历一个父节点的子节点并进行删除操作时,要注意,children属性是一个只读属性,并且它在子节点变化时会实时更新。<p id="parent">
<p>First</p>
<p>Second</p>
</p>
var parent = document.getElementById('parent');
parent.removeChild(parent.children[0]);
parent.removeChild(parent.children[1]); // <-- 浏览器报错
The above is the detailed content of JavaScript tutorial: detailed explanation of how to update, insert, and modify dom node instance code. For more information, please follow other related articles on the PHP Chinese website!