为什么会提到Dom树呢,或许它对于我们很好地理解网页各个元素,标签和控件搭配,以及各种js,css等的加载会有一些帮助。笔者在工程中遇到了一些小问题,本质就是dom树的东西掌握的不扎实。所以借此来梳理一下。 1.HTML DOMok, 我们先来看一下W3school中怎么解释这个概念和结构的。W3school是一个很不错的网站,很适合初学者和基础不扎实的人。 HTML DOM 定义了访问和操作 HTML 文档的标准方法。DOM 将 HTML 文档表达为树结构。 W3C 文档对象模型 (DOM) 是中立于平台和语言的接口,它允许程序和脚本动态地访问和更新文档的内容、结构和样式。 DOM 节点 2.获取节点的原生方法 innerHTML 属性获取元素内容的最简单方法是使用 innerHTML 属性。 innerHTML 属性对于获取或替换 HTML 元素的内容很有用。 document.write输出文本 document.write(document.anchors.length); 锚的数量: 加入anchors[] 可以看成数值寻找索引 document.write(document.forms[0].name); 表单数目 document.write(document.images.length); 图像数目 document.write(document.images[0].id); 图像id document.write(document.links.length); 链接数目 document.write(document.domain); 返回区域名 document.write(document.lastModified); 文档最后一次修改时间 document.write(document.title); 返回文档标题 document.writeln document write 不同 writeln 新增一行 write 在后面增加 getElementById() 方法getElementById() 方法返回带有指定 ID 的元素引用: 语法node.getElementById("id");
getElementById 是一个方法,而 innerHTML 是属性。 改变 HTML 样式通过 HTML DOM,您能够访问 HTML 元素的样式对象
getElementsByTagName() 方法getElementsByTagName() 返回带有指定标签名的所有元素。 语法node.getElementsByTagName("tagname");
根据X[ ]寻找索引 然后显示 例子返回包含文档中所有 <p> 元素的列表,并且这些 <p> 元素应该是 id="main" 的元素的后代(子、孙等等)
The getElementsByClassName() Method如果您希望查找带有相同类名的所有 HTML 元素,请使用这个方法: document.getElementsByClassName("intro"); 如果您希望查找带有相同类名的所有 HTML 元素,请使用这个方法: document.getElementsByClassName("intro"); 上面的例子返回包含 class="intro" 的所有元素的一个列表: 注意:getElementsByClassName() 在 Internet Explorer 5,6,7,8 中无效。 appendChild() 方法 将新节点增加到指定节点creatElement() 方法 创建属性节点creatTextNode() 方法 创建文本节点
这段代码创建了一个新的 <p> 元素: var para=document.createElement("p"); 如需向 <p> 元素添加文本,您首先必须创建文本节点。这段代码创建文本节点: var node=document.createTextNode("这是一个新段落。"); 然后您必须向 <p> 元素追加文本节点: para.appendChild(node); 最后,您必须向已有元素追加这个新元素。 这段代码查找到一个已有的元素: var element=document.getElementById("div1"); 这段代码向这个已存在的元素追加新元素: element.appendChild(para) 创建新的 HTML 元素 - insertBefore()appendChild() 方法,将新元素作为父元素的最后一个子元素进行添加。
删除已有的 HTML 元素removechild
查找 id="div1" 的元素: var parent=document.getElementById("div1"); 查找 id="p1" 的 <p> 元素: var child=document.getElementById("p1"); 从父元素中删除子元素: parent.removeChild(child); 替换子节点属性 replacechild
nodeValue 属性nodeValue 属性规定节点的值。
childNodes 和 nodeValue除了 innerHTML 属性,您也可以使用 childNodes 和 nodeValue 属性来获取元素的内容。 下面的代码获取 id="intro" 的 <p> 元素的值:
使用事件HTML DOM 允许您在事件发生时执行代码。 当 HTML 元素"有事情发生"时,浏览器就会生成事件:
你可以在下一章学习更多有关事件的内容。 下面两个例子在按钮被点击时改变 <body> 元素的背景色 <input type="button"onclick="document.body.style.backgroundColor='lavender';"value="修改背景颜色"> 由函数执行相同的代码 function ChangeBackground(){ document.body.style.backgroundColor="lavender"; } </script> <input type="button" onclick="ChangeBackground()" value="修改背景颜色" /> <p id="p1">Hello world!</p> <script>function ChangeText(){ document.getElementById("p1").innerHTML="Hello Runoob!"; } </script> <input type="button" onclick="ChangeText()" value="修改文本" /> 对事件作出反应当事件发生时,可以执行 JavaScript,比如当用户点击一个 HTML 元素时。 如需在用户点击某个元素时执行代码,请把 JavaScript 代码添加到 HTML 事件属性中: onclick=JavaScript <h1 onclick="this.innerHTML='Ooops!'">点击文本!</h1> <script>function changetext(id){ id.innerHTML="Ooops!"; } </script> </head> <body> <h1 onclick="changetext(this)">点击文本!</h1> onload 和 onunload 事件当用户进入或离开页面时,会触发 onload 和 onunload 事件。 onload 事件可用于检查访客的浏览器类型和版本,以便基于这些信息来加载不同版本的网页。 onload 和 onunload 事件可用于处理 cookies
onchange 事件onchange 事件常用于输入字段的验证。 下面的例子展示了如何使用 onchange。当用户改变输入字段的内容时,将调用 upperCase() 函数。
onmouseover 和 onmouseout 事件onmouseover 和 onmouseout 事件可用于在鼠标指针移动到或离开元素时触发函数。
onmousedown、onmouseup 以及 onclick 事件onmousedown、onmouseup 以及 onclick 事件是鼠标点击的全部过程。首先当某个鼠标按钮被点击时,触发 onmousedown 事件,然后,当鼠标按钮被松开时,会触发 onmouseup 事件,最后,当鼠标点击完成时,触发 onclick 事件
HTML DOM 节点列表长度length 属性定义节点列表中节点的数量。 您可以使用 length 属性来循环节点列表:
DOM 根节点这里有两个特殊的属性,可以访问全部文档:
3.JS中的节点操作 4.jQuery中的结点操作
b. prepend()和prependTo(), 这也是一对儿对应的操作方法。其作用是添加一个结点到父节点中并前置。用法和上一对儿一样。 c. 与之对应的还有after, insertAfter; before, insertBefore等,其用法都和上面的相同。其效果是将新建的元素插入到指定的元素之后/前,并和目标元素紧邻,作为兄弟结点存在。 (2)删除结点
我们可以看到,该示例中,先删除所有的span元素,把删除的元素使用$span接收,把删除后的元素添加到ul后面,作为ul的兄弟结点。该操作产生的效果即把所有的span元素以及后代元素移到ul后面。 (3)修改DOM节点
b.替换节点
c.包裹节点
(4)属性操作
(5)样式操作
css操作
至此,大概的Dom操作就已经梳理完了。 按照惯例,列出一些可以参考的资料 https://blog.csdn.net/qq_41328247/article/details/80074098 |
|