现在我们将学习如何使用 JavaScript 实现 DOM 元素新建删除插入
学习完以上文档请您确保自己掌握了以下 DOM 方法:
DOM 元素创建
使用 document.createElement(tag)方法创建一个
let img = document.createElement("img");
DOM 元素删除 使用 node.remove() 删除这个 dom 节点
<h1 id="headline">title</h1>; const headline = document.querySelector("#headline"); headline.remove(); //删除了 headline
DOM 元素插入
使用 element.insertAdjacentHTML(position, htmlString)将 htmlString 根据位置添加/附加到 element 中。
<ul></ul>; const fruits = ["apple", "banana", "orange"]; const list = document.querySelector("ul"); fruits.forEach((fruit) => { list.insertAdjacentHTML("beforeend", `<li>${fruit}</li>`); });
将会得到 DOM 结构如下:
<ul> <li>apple</li> <li>banana</li> <li>orange</li> </ul>
您可以使用 parentNode .appendChild( childNode )] 方法追加 childNode 作为 parentNode 的最后一个子节点
使用 parentNode .insertBefore( newNode , referenceNode )方法在 referenceNode 之前将 newNode 插入 parentNode
使用 parentNode.prepend(newNode)方勇 在 parentNode 的第一个子节点之前插入 newNode
element.textContent 返回 DOM 元素内部文本,可以通过它修改 DOM 内部文本值。
如果您希望浏览器将 HTML 字符串呈现并解释为 HTML,则必须使用 innerHTML 属性
如果您正在呈现的字符串来自您的用户(例如,来自用户可以填写的评论框的字符串),那么您应该避免使用 innerHTML,因为您的用户将能够在其中编写 HTML 和 JavaScript 代码您的页面可能会导致安全问题。这称为跨站点脚本 (XSS) 攻击。
这是一个例子。假设您有一个输入框:
<input id="name" type="text" /> <p id="showName"></p>
用户在评论框中写下以下代码:
<script>alert("你被黑客袭击了!");</script>
然后,您获取此用户输入并将其呈现为页面某处的 HTML 字符串: /* bca-disable */
let userComment = document.querySelector("#name").value; //"<script> alert("你被黑客袭击了!");</script>" document.querySelector("#showName").innerHTML = userComment;
浏览器最终将运行该用户编写的脚本。用户可以做更多恶意的事情,比如将用户重定向到另一个网站,或者窃取他们的 cookie,从而允许攻击者冒充用户等。
所以底线是:如果您正在呈现的字符串来自您的用户,那么您应该坚持 element.textContent = string 并且永远不要更改该 innerHTML 属性,以避免在您的页面上出现不需要的 HTML。 /* bca-disable */
HTML 元素可以有零个或多个属性,例如常见属性:class、id 和 disabled ,您可以使用与属性相关的通用方法来获取、设置和删除属性。
现在,我们就运用上面学习的 DOM 知识来实现留言板功能
下载DOM_TASK_CommentBoard.zip 压缩包 (opens new window),您将得到三个文件:index.js,index.html,style.css,保存到本地
为了让您集中练习今天学到的 DOM 知识,我们已经给出了 HTML 和 CSS 代码(有兴趣的同学可以自行实现),请您在 index.js 中实现以下功能:
<hr /> <h4> <span>姓名</span> <span class="date">日期</span> </h4> <p>留言内容</p>
const comments = [ { name: "Danny", comment: "Lorem Ipsum dolor sit amet, consectetur adipiscing elit, sed do eiusmod tempor incididunt ut labore et dolore magna aliqua. Ut enim ad minim veniam", time: "Thu Jan 12 2022", }, { name: "Jackson", comment: "Lorem Ipsum dolor sit amet, consectetur adipiscing elit", time: "Thu Jan 11 2022", }, ];
实现更新留言板
验证:
输入以上内容, <h1>和<strong>标签不会起作用。
更多相关技术内容咨询欢迎前往并持续关注六星社区了解详情。
长按或扫描下方二维码,免费获取 Python公开课和大佬打包整理的几百G的学习资料,内容包含但不限于Python电子书、教程、项目接单、源码等等
如果觉得我的文章对您有用,请随意打赏。你的支持将鼓励我继续创作!