公众号
关注微信公众号
移动端
创头条企服版APP

JavaScript之DOM对象——升学就业帮Java知识分享

3278
升学就业帮 2021-07-17 15:03 抢发第一评

1. DOM对象认识

1.1 什么是DOM对象


DOM模型的全称是:Document Object Model, 即:文档对象模型,它定义了操作文档对象的接口。

WEB页面的HTML文档,document就是根节点,其它的子对象就是子结点.

DOM模型在AJAX开发中的作用

在ajax中,DOM模型其实是最核心的结构,是所有ajax开发的基础架构.如果没有DOM模型,就没有办法在客户端改变页面的内容,所有的局部刷新,异步请求也就无从实现。熟练掌握DOM模型的相关技术,才算真正掌握了ajax开发精髓。

1.2 浏览器装载和显示页面的过程

1. 下载源代码

2. 通过页面源代码加载相关内容到内存,也就是根据HTML源码在内存中构建相关DOM对象。

3. 根据DOM对象的相关属性,来进行显示。


1.3 DOM节点分类node

1.3.1 节点的概念

在DOM模型中,整个文档就是由层次不同的多个节点组成,可以说结点代表了全部内容。

1.3.2 节点的类型

元素结点、文本结点和属性结点

hello DOM!

文本节点和属性结点都看作元素结点的子结点

我们一般所说的结点指的就是元素结点。

1.3.3 节点的基本属性

nodeName:元素结点返回结点类型(即,标记名称);属性结点返回属性名称,文本节点返回"#text".

nodeType:元素节点返回1,属性节点返回2,文本节点返回3

nodeValue:元素节点返回null, 属性节点返回属性值, 文本结点返回文本值。

1.4 DOM节点关系

浏览器在解析文档之前会将文档读取到内存形成DOM树,树形节点存在相关层级关系,常用关系如下所示:

根节点(root): 所有节点的顶层节点

父子节点(parent-child): 元素作为父级, 和 元素作为子级

兄弟节点(Sibling):

元素就是兄弟关系; 和 <h1> 元素并不是兄弟关系</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">叶子节点</span>: 没有任何子节点的节点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">空节点</span>: 没有任何内容的节点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">2. DOM对象的获取</span></p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">2.1 获取元素节点对象</span></p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">1.使用document.getElementById()引用指定id的结点</p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">// 需求: 点击按钮实现通过id获取p节点以及节点的信息function getNodeById() {     var pNode = document.getElementById("p");     console.log(pNode);     console.log("nodeName: " + pNode.nodeName + ",nodeValue: "          + pNode.nodeValue + ",nodeType: " + pNode.nodeType); }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">2. 使用<br style="box-sizing: border-box;"/>document.getElementsByClassName(“hello”)将所有class属性为”hello”的元素结点放到一个数组中返回</span></p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">function getNodeByClassName() {     var pNodes = document.getElementsByClassName("hello");     for (var i = 0; i < pNodes.length; i++) {         var pNode = pNodes[i];         console.log(pNode);         console.log("nodeName: " + pNode.nodeName + ",nodeValue: "               + pNode.nodeValue + ",nodeType: " + pNode.nodeType);     } }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">3. 使用<br style="box-sizing: border-box;"/>document.getElementsByTagName(“a”),将所有<a>元素结点放到一个数组中返回。</span></p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">function getNodeByTagName() {var aNodes = document.getElementsByTagName("a");     for (var i = 0; i < aNodes.length; i++) {         var aNode = aNodes[i];         console.log(aNode);         console.log("nodeName: " + aNode.nodeName + ",nodeValue: "               + aNode.nodeValue + ",nodeType: " + aNode.nodeType);     } }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; margin: 0px; padding: 0px; border: 0px;">4. 使用<br style="box-sizing: border-box;"/>document.getElementsByName(“gender”),将所有name属性为”gender”的元素结点放到一个数组中返回。</span></p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">function getNodeByName() {     var radios = document.getElementsByName("gender");     for (let i = 0; i < radios.length; i++) {         var radio = radios[i];         console.log(radio);         console.log("nodeName: " + radio.nodeName + ",nodeValue: "               + radio.nodeValue + ",nodeType: " + radio.nodeType);             } }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">2.2 间接获得元素对象</span></p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">间接引用节点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">1.引用子结点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">每个结点都有一个<span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">childNodes</span>集合属性,类型是数组对象,表示该结点的所有子结点的集合。这些子结点按照它在文档中出现的顺序排列,因此可以通过索引来依次访问各个子结点。</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">firstChild</span>: 获取第一个子节点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">lastChild</span>: 获取最后一个子节点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">2.引用父节点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">DOM模型中,除了根结点,每个结点都仅有一个父节点,可以用<span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">parentNode</span>属性来引用。</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">3. 引用兄弟结点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">element.nextSibling;</span> //引用下一个兄弟结点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">element.<span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">previousSibling</span>; //引用上一个兄弟结点</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">如果该结点没有相应的兄弟结点,则属性返回null.</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">案例: 根据以下HTML结构,实现DOM节点相关操作:</p><pre class="syl-page-code hljs xml" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;"><div id="parent"><p id="p1">白日依山尽</p>    <p id="p2">黄河入海流</p>    <p id="p3">欲穷千里目</p>     <p id="p4">更上一层楼</p></div><button onclick="getNodeByParent();">通过父节点获取子节点</button><button onclick="">通过子节点获取父节点</button><button onclick="">通过节点获取兄弟节点</button></pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">1. 通过父节点获取子节点</p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">function getNodeByParent() {// 1. 获取父节点    var parentNode = document.getElementById("parent");  // 2. 通过父节点获取所有子节点    var childNodes = parentNode.childNodes;     console.log("chiledNodes: " + childNodes.length);     console.log("childElementCount: " + parentNode.childElementCount);     // 3. 遍历输出所有的子节点    for (var i = 0; i < childNodes.length; i++) {         var childNode = childNodes[i];         console.log("==> 第" + (i + 1) + "个节点: ")        console.log(childNode);        console.log("nodeName: " + childNode.nodeName + ",nodeValue: "            + childNode.nodeValue + ",nodeType: " + childNode.nodeType);     }     // 4. 获取第一个节点和最后一个节点    console.log(parentNode.firstChild);    console.log(parentNode.lastChild);    console.log(parentNode.firstElementChild);    console.log(parentNode.lastElementChild);     console.log("=======================");    var childNodes = parentNode.children;     for (var i = 0; i < childNodes.length; i++) {         var childNode = childNodes[i];        console.log(childNode);     } }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">2. 通过子节点获取父节点</p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">function getNodeBySon() {var p2Node = document.getElementById("p2");    // 获取父节点    var parentNode = p2Node.parentNode;    console.log(parentNode);     console.log(p2Node.parentElement); }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">3. 通过某个节点获取兄弟节点</p><pre class="syl-page-code hljs javascript" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;">function getNodeByBrother() {var p2Node = document.getElementById("p2");     // 获取紧邻的下一个节点    console.log(p2Node.nextSibling);    // 获取紧邻的下一个元素节点    console.log(p2Node.nextElementSibling);    // 获取紧邻的上一个节点    console.log(p2Node.previousSibling);     // 获取紧邻的上一个元素节点    console.log(p2Node.previousElementSibling); }</pre><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);"><span style="box-sizing: border-box; font-weight: 700; margin: 0px; padding: 0px; border: 0px;">3. DOM操作元素的属性</span></p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">元素结点.属性名称(可以读写属性值)</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">使用setAttritbute(), getAttribute()添加和设置属性</p><p style="white-space: normal; box-sizing: border-box; margin-top: 20px; margin-bottom: 20px; padding-top: 0px; padding-bottom: 0px; border: 0px; color: rgb(34, 34, 34); font-family: "PingFang SC", "Hiragino Sans GB", "Microsoft YaHei", "WenQuanYi Micro Hei", "Helvetica Neue", Arial, sans-serif; font-size: 18px; text-align: justify; background-color: rgb(255, 255, 255);">代码示例如下:</p><pre class="syl-page-code hljs xml" style="box-sizing: border-box; font-family: Monaco; font-size: 18px; margin-top: 20px; margin-bottom: 20px; padding: 15px; white-space: pre-wrap; border: 0px; background-color: rgb(250, 250, 250); word-break: break-all; overflow-x: auto; border-radius: 3px; color: rgb(34, 34, 34); box-shadow: rgba(216, 216, 216, 0.5) 0px 0px 0px 1px inset;"><!DOCTYPE html><html lang="en"><head>    <meta charset="UTF-8">    <meta name="viewport" content="width=device-width, initial-scale=1.0"><title>DOM操作属性          设置节点的属性    

4. DOM操作元素内容

当标签获得值的时候使用value属性

双标签获得值的时候使用的是innerHTML或者innerText

双标签的特殊情况(value)

Select/textarea

取值的时候使用value属性

赋值的时候使用innerHTML或者innerText即可


要获取一个结点内的文本,一般使用innerHTML属性

innerHTML属性不局限于操作一个结点,而是可以使用HTML片段直接填充页面或直接获取HTML片段,大大提高了开发的灵活性。

InnerText节点的属性:

获取: 获取的是文本,不会获取标签

设置: 都是文本,浏览器不会解析里面包含的html标签

相关代码如下所示:

 
       Document            

标签

     

    获取元素文本    设置元素文本    
     简介:         家乡:          武汉        兰州        银川          获取表单数据    

5. DOM操作样式

1.通过style对象改变节点的CSS

利用style对象来控制元素的css, 每个style对象对应为该元素指定的css, 而每个css属性都对应于style对象的属性。

对于单个单词的css属性,在style对象中的属性名称不变,但对于双单词或多单词的属性改写为骆驼写法。例如:css中的font-size对应style属性为fontSize.

2.使用className属性指定结点样式

结点的className属性对应于css中的类选择器。

相关代码如下所示:

 
      
 21.DOM对象操作样式 
     
  Hello Xyr
     节点样式的修改    

6. DOM操作节点

使用document.createElement方法创建元素结点

var divElement = document.createElement(“div")

使用appendChild方法添加结点

parentNode.appendChild(childElement);

使用insertBefore方法插入子结点

parentNode.insertBefore(newNode, beforeNode)

使用removeChild方法删除子结点

parentNode.removeChild(childNode);

使用replaceChild方法替换子结点

parentNode.replaceChild(newNode, childNode);

使用cloneNode方法克隆节点,传入true表示深拷贝

node.cloneNode(true);

相关操作代码如下所示:

  
     
     Document     
   
  • AAA
  •          
  • BBB
  •          
  • CCC
  •          
  • DDD
  •               
         添加节点     在指定元素之前添加节点    替换节点    删除节点    复制节点    

    7. JavaScript操作表单

    7.1 获取表单对象的方法

    利用表单在文档中的索引或表单的name属性来引用表单

    1. docuemnt.getElementById 通过id获取表单对象

    2. document.formName 通过document对象的表单name属性获取表单对象

    3. document.forms[i] 通过文档的foms属性得到所有的表单对象,返回表单的数组,通过索引获取对应的表单对象

    4. document.forms[formName] 通过文档的foms属性得到所有的表单对象,返回表单的数组,通过表单name属性获取对应的表单对象

    代码如下所示:

      
          账号: 
             密码: 
             获取表单对象获取表单属性

    7.2 获取表单常用属性

    表单常用属性如下表所示:

    属性

    描述

    action

    返回或者设置action属性

    elements

    获取一个数组,包括该表单中所有的表单域

    length

    返回表单的表单域的数量

    method

    返回或设置表单的method属性

    name

    返回或设置表单的name属性

    代码示例如下所示:

    // 获取表单属性function getFormAttr() {   
     var loginForm = document.getElementById("login");// 获取表单的action属性    console.log(loginForm.action);    // 获取表单的长度    console.log(loginForm.length);    // 获取表单的method属性    console.log(loginForm.method);   
     // 获取所有表单域对象,返回的是一个数组    var forms = loginForm.elements;
        for(var i = 0; i < forms.length; i++) {   
       var form = forms[i];        console.log(form); 
       }
    }

    运行结果如下图所示:


    7.3 表单对象的常用方法

    表单常用方法如下表所示:

    方法

    描述

    submit()

    相当于单击submit按钮,表示表单提交到指定页面

    reset()

    相当于单击reset按钮,表示所有表单域到初始值

    代码示例如下所示:

    // 提交表单function submitForm() {    var loginForm = document.getElementById("login");  
      loginForm.submit();
    }// 重置表单function resetForm() {var loginForm = document.getElementById("login");
        loginForm.reset();
    }

    7.4 form表单的常用事件属性

    表单常用事件属性如下表所示:

    事件

    描述

    onsubmit

    在表单提交之前触发

    onreset

    在表单被重置之前触发

    注意:

    1.表单点击提交会触发onsubmit事件,执行的函数需要给出返回值,返回true表示可以提交数据,返回false,表示不能提交数据

    2.其中onsubmit属性的属性值return关键字不能省略,如果省略的 返回结果为false,还会提交数据和页面跳转。

    3.reset表示重置到初始的状态,而不是清空。

    7.5 form中表单域对象的获取

    可以通过如下三种方式获取:

    1. 通过id获取表单域

    2. 通过表单的name来获取

    3. form.elements[i]; 表单的元素下标来获取

    代码示例如下所示:

    function getFormField() {
        // 通过id获取表单域     var accountNode = document.getElementById("accountId");   
     console.log(accountNode);    // 通过表单的name来获取     var loginForm = document.getElementById("login");    var accountNode2 = loginForm.account;    console.log(accountNode2);    // form.elements[i]; 表单的元素下标来获取     var accountNode3 = loginForm.elements[0]''   
     console.log(accountNode3);
    }

    7.5 form表单域组件常用属性和方法.

    disabled :使表单域不能接受用户的操作,变为只读

    readonly: 内容不可以更改,变为只读

    name :获取或设置表单域的名称

    form:获取该表单域所属的表单

    value:获取或设置表单域的值

    type :判断表单域的类型

    focus():使表单域获得焦点

    blur():使表单域失去焦点

    注意:

    1. 设置readonly属性的时候only首字母需要大写才能生效

    2. 一个页面只能够有一个组件设置为获得焦点

    3. blur方法常用于在失去焦点时进行表单校验,部分代码如下所示:

     账号:  
            密码: 
                 

    readonly和disabled的区别?

    共同点:都是导致内容不可以更改

    区别:

    readonly:中的内容是可以提交的

    disabled:数据是不可以提交的,不可以在被操作

    代码示例如下所示:

        
             账号: 
             密码: 
                     表单域的常用属性设置    

    7.6 单选按钮组和复选框常用操作

    通过checked属性获得选中和未选中的状态。

    获得单选按钮组的值:只能通过遍历单选按钮来获取被选中的值

    复选框的处理类似单选按钮

    获取所有单选按钮或者复选按钮对象使用getElementByName("name")

    使用复选按钮实现全选和反选效果图如下所示:


    代码示例如下所示:

           
       
      DOM操作单选和复选按钮    
    性别: 男
        
        获取单选框的值     
        
        爱好: 游泳      足球      篮球      写代码 
        全选/全不选
        获取多选框的值    多选框全选操作    全选    全不选     反选    
        

    7.7 下拉列表的使用

    常用属性的使用

    使用value属性获取和设置下拉列表选中选项的值

    使用selectedIndex属性获取当前被选中选项的索引

    使用options属性获取所有选项集合

    使用option对象的value属性和text属性, 可以读写这两个属性。

    使用option对象的selected属性选中该option

    示例代码如下所示:

    家乡:     南昌    北京    深圳   
     上海获取下拉框的值添加选项

    我们也可以通过下拉选项框对象的appendChild方法或者add方法添加option节点,代码如下所示:

    function addMyOption() {    // 1. 获取到select节点    var selectNode = document.getElementById("city");    // 2. 创建一个option    var opt = document.createElement("option");   
     // 3. 设置option节点属性    opt.value = "cq";    
    opt.text = "重庆";    // 4. 将opt添加到select节点中    selectNode.add(opt);
    }

    案例: 使用下拉选项框实现左选和右选添加的案例,效果图如下所示:


    示例代码如下所示:

     
                      
     #div1 {            width: 1000px;            margin: 0 auto;            margin-top: 200px;       
     }        #div11 {            width: 300px;            height: 400px;            border: 1px solid red;           
     float: left;        
    }       
     #div12 {            width: 200px;            height: 400px;           
     border: 1px solid blue;            /*position: absolute;*/           
     /*left: 400px;*/            float: left;       
     }        #div13 {           
     width: 300px;           
     height: 400px;           
     border: 1px solid green;            float: left;        
    }      
      input {           
     margin-left: 50px;    
    }      
      .add {          
      margin-top: 100px;      
      }        #select1 {            width: 300px;           
     height: 400px;       
     }       
     #select2 {           
     width: 300px;            height: 400px;        
    }                                            AAAAAAAAAAAAAAA                BBBBBBBBBBBBBBB                CCCCCCCCCCCCCCC                DDDDDDDDDDDDDDD                EEEEEEEEEEEEEEE           
             
                        " />                          >" />                    
                                        HHHHHHHHHHHHHHH                IIIIIIIIIIIIIII                JJJJJJJJJJJJJJJ                OOOOOOOOOOOOOOO                PPPPPPPPPPPPPPP                     
        
        function selectToRight() {         // 1.获取到select1标签        // 2.得到select标签的子标签        // 3.遍历子标签数组,获取到每一个option        // 4.判断是否被选中        /*          *  选中          *      获取到select2标签          *      添加到select2中          *  未选中          */       // 1.获取到select1标签        var select1 = document.getElementById("select1");         var select2 = document.getElementById("select2");         // 2.得到select标签的子标签        var options = select1.options;        // 3.遍历子标签数组,获取到每一个option        /*          * i=0 length = 5           * i=1 lenght = 5          */        for (var i = 0; i < options.length; i++) {             var op = options[i];             // 4.判断是否被选中            if (op.selected == true) {               // 添加到select2中                 select2.add(op);                -;             }         }     }    function selecAllToRight() {         // 获取到select1中标签        var select1 = document.getElementById("select1");         var select2 = document.getElementById("select2");         // 得到标签中所有的子标签        var options = select1.options;         // 遍历子标签数组,得到每一个子标签        for (var i = 0; i < options.length; i++) {            var op = options[i];             // 添// 将每一个子标签添加到select2中            select2.add(op);           -;         }     }   function selectToLeft() {       // 1.获取到select1标签       var select1 = document.getElementById("select1");         var select2 = document.getElementById("select2");         // 2.得到select标签的子标签        var options = select2.options;         // 3.遍历子标签数组,获取到每一个option        /*          * i=0 length = 5           * i=1 lenght = 5          *           */         for (var i = 0; i < options.length; i++) {             var op = options[i];             // 4.判断是否被选中            if (op.selected == true) {                 // 添加到select2中                 select1.add(op);           -;             }         }     }     function selecAllToLeft() {        // 获取到select1中标签        var select1 = document.getElementById("select1");         var select2 = document.getElementById("select2");        // 得到标签中所有的子标签        var options = select2.options;         // 遍历子标签数组,得到每一个子标签        for (var i = 0; i < options.length; i++) {             var op = options[i];             select1.add(op);             i--;         }     }二级联动案例如下所示:        三级联动            --请选择--        中国        美国         英国        日本             // 定义数据源    var chinaArr = ["北京", "上海", "南京", "南昌"];    var americaArr = ["华盛顿", "纽约", "底特律", "费城"];    var englandArr = ["伦敦"];    var japanArr = ["广岛", "长崎", "东京", "大阪"];    var country = new Array(4);     country[0] = ["中国", chinaArr];     country[1] = ["美国", americaArr];     country[2] = ["英国", englandArr];     country[3] = ["日本", japanArr];     function addToSelect(selectValue) {        //          alert(selectValue);        // 获取到country和city两个下拉选项框        var countrySelect = document.getElementById("country");         var citySelect = document.getElementById("city");         // 获取到citySelct中所有的option        var ops = citySelect.getElementsByTagName("option");         for (var i = 0; i < ops.length; i++) {            // 获取到每一个城市的option            var op = ops[i];             // 移除option            citySelect.removeChild(op);  -;         }        // 获取到所有的对应选中国家的城市        for (var i = 0; i < country.length; i++) {            var arr1 = country[i];            // 获取到第一个元素            var firstValue = arr1[0];            // 判断是否和传入的值相同            if (firstValue == selectValue) {                var otherValueArr = arr1[1];                 for (var j = 0; j < otherValueArr.length; j++) {                    // 获取到二维数组中每一个一维数组的元素                    var value = otherValueArr[j];                    // 创建option节点                    var optionEle = document.createElement("option");                     // 创建文本节点                    var textNode = document.createTextNode(value);                     // 将文本添加到option当中                    optionEle.appendChild(textNode);                    // 将option添加到city选项中                    citySelect.appendChild(optionEle);                 }             }         }     }


    声明:该文章版权归原作者所有,转载目的在于传递更多信息,并不代表本网赞同其观点和对其真实性负责。如涉及作品内容、版权和其它问题,请在30日内与本网联系。
    您阅读这篇文章花了0
    转发这篇文章只需要1秒钟
    喜欢这篇 0
    评论一下 0
    相关文章
    评论
    试试以这些内容开始评论吧
    登录后发表评论
    最新专题
    阿里云创新中心
    ×
    #热门搜索#
    精选双创服务
    历史搜索 清空

    Tel:18514777506

    关注微信公众号

    创头条企服版APP