Blogger Information
Blog 5
fans 0
comment 0
visits 3919
Popular Tutorials
More>
Latest Downloads
More>
Web Effects
Website Source Code
Website Materials
Front End Template
DOM 对象
Original
800 people have browsed it

DOM 对象

简单了解下DOM

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
  5. <title>style样式</title>
  6. </head>
  7. <body>
  8. <h2 id="con">I love JavaScript</H2>
  9. <p> JavaScript使网页显示动态效果并实现与用户交互功能。</p>
  10. <script type="text/javascript">
  11. let con = document.getElementById('con');
  12. con.style.color = 'red';
  13. con.style.backgroundColor = '#CCC';
  14. con.style.display = 'none';
  15. </script>
  16. </body>
  17. </html>

getElementsByName()方法

返回带有指定名称的节点对象的集合。

语法

document.getElementsByName(name)

与getElementById() 方法不同的是,通过元素的 name 属性查询元素,而不是通过 id 属性。

注意:

  1. 因为文档中的 name 属性可能不唯一,所有 getElementsByName() 方法返回的是元素的数组,而不是一个元素。

  2. 和数组类似也有length属性,可以和访问数组一样的方法来访问,从0开始。

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <script type="text/javascript">
  5. function getnum() {
  6. var mynode = document.getElementsByName('myt');
  7. alert(mynode.length);
  8. }
  9. </script>
  10. </head>
  11. <body>
  12. <input name="myt" type="text" value="1">
  13. <input name="myt" type="text" value="2">
  14. <input name="myt" type="text" value="3">
  15. <br />
  16. <input type="button" onclick="getnum()" value="看看有几项?" />
  17. </body>
  18. </html>

getElementsByTagName()方法

返回带有指定标签名的节点对象的集合。返回元素的顺序是它们在文档中的顺序。

语法:

document.getElementsByTagName(Tagname)

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  5. <title>JavaScript</title>
  6. </head>
  7. <body>
  8. <form name="Input">
  9. <table align="center" width="500px" height="50%" border="1">
  10. <tr>
  11. <td align="center" width="100px">
  12. 学号:
  13. </td>
  14. <td align="center" width="300px">
  15. <input type="text" id=userid name="user" onblur="validate();">
  16. <div id=usermsg></div>
  17. </td>
  18. </tr>
  19. <tr>
  20. <td align="center" width="100px">
  21. 姓名:
  22. </td>
  23. <td align="center">
  24. <input type="text" name="name">
  25. </td>
  26. </tr>
  27. <tr>
  28. <td align="center" width="%45">
  29. 性别:
  30. </td>
  31. <td align="center">
  32. <input type="radio" name="sex" value="男">
  33. <input type="radio" name="sex" value="女">
  34. </td>
  35. </tr>
  36. <tr>
  37. <td align="center" width="30%">
  38. 年龄:
  39. </td>
  40. <td align="center" width="300px">
  41. <input type="text" name="age">
  42. </td>
  43. </tr>
  44. <tr>
  45. <td align="center" width="100px">
  46. 地址:
  47. </td>
  48. <td align="center" width="300px">
  49. <input type="text" name="addr">
  50. </td>
  51. </tr>
  52. </table>
  53. </form>
  54. <h1 id="myHead" onclick="getValue()">
  55. 看看三种获取节点的方法?
  56. </h1>
  57. <p>
  58. 点击标题弹出它的值。
  59. </p>
  60. <input type="button" onclick="getElements()" value="看看name为sex的节点有几个?" />
  61. <Br>
  62. <input type="button" onclick="getTagElements()" value="看看标签名为input的节点有几个?" />
  63. <script type="text/javascript">
  64. function getValue() {
  65. let myH = document.getElementById('myHead');
  66. alert(myH.innerHTML)
  67. }
  68. function getElements() {
  69. let myS = document.getElementsByName('sex');
  70. alert(myS.length);
  71. }
  72. function getTagElements() {
  73. let myI = document.getElementsByTagName('input');
  74. alert(myI.length);
  75. }
  76. </script>
  77. </body>
  78. </html>

练习实例, 体会不同DOM对象获取方式的不同效果

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=gb2312">
  5. <title>全选/全不选</title>
  6. </head>
  7. <body>
  8. <form>
  9. 请选择你爱好:<br>
  10. <input type="checkbox" name="hobby" id="hobby1"> 音乐
  11. <input type="checkbox" name="hobby" id="hobby2"> 登山
  12. <input type="checkbox" name="hobby" id="hobby3"> 游泳
  13. <input type="checkbox" name="hobby" id="hobby4"> 阅读
  14. <input type="checkbox" name="hobby" id="hobby5"> 打球
  15. <input type="checkbox" name="hobby" id="hobby6"> 跑步 <br>
  16. <input type="button" value="全选" onclick="checkall();">
  17. <input type="button" value="全不选" onclick="clearall();">
  18. <p>请输入您要选择爱好的序号,序号为1-6:</p>
  19. <input id="wb" name="wb" type="text">
  20. <input name="ok" type="button" value="确定" onclick="checkone();">
  21. </form>
  22. <script type="text/javascript">
  23. function checkall() {
  24. var hobby = document.getElementsByTagName("input");
  25. for(i=0;i<hobby.length;i++){
  26. if(hobby[i].getAttribute('name') == 'hobby'){ // 获取属性
  27. hobby[i].setAttribute('checked','checked'); // 添加属性
  28. }
  29. }
  30. }
  31. function clearall() {
  32. var hobby = document.getElementsByName("hobby");
  33. for(i=0;i<hobby.length;i++){
  34. if(hobby[i].getAttribute('name') == 'hobby'){
  35. hobby[i].removeAttribute('checked'); // 移除属性
  36. }
  37. }
  38. }
  39. function checkone() {
  40. var j = document.getElementById("wb").value; // 获取要选中的元素
  41. var hobby = document.getElementsByTagName('input'); // 获取所有元素
  42. var jid = "hobby"+j; // 拼接元素ID
  43. for(i=0;i<hobby.length;i++){ // 遍历所有元素
  44. if(hobby[i].getAttribute('id') == jid){ // 查询指定元素
  45. hobby[i].setAttribute('checked','checked'); // 添加属性
  46. }
  47. }
  48. }
  49. </script>
  50. </body>
  51. </html>

getAttribute()方法

通过元素节点的属性名称获取属性的值。

语法:

  1. elementNode.getAttribute(name)

说明:

  1. elementNode:使用getElementById()、getElementsByTagName()等方法,获取到的元素节点。

  2. name:要想查询的元素节点的属性名字

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>getAttribute()</title>
  6. </head>
  7. <body>
  8. <p id="intro">课程列表</p>
  9. <ul>
  10. <li title="第1个li">HTML</li>
  11. <li>CSS</li>
  12. <li title="第3个li">JavaScript</li>
  13. <li title="第4个li">Jquery</li>
  14. <li>Html5</li>
  15. </ul>
  16. <p>以下为获取的不为空的li标签title值:</p>
  17. <script type="text/javascript">
  18. var con = document.getElementsByTagName("li");
  19. for (var i = 0; i < con.length; i++) {
  20. var text = con[i].getAttribute('title');
  21. if (text != null) {
  22. document.write(text + "<br>");
  23. }
  24. }
  25. </script>
  26. </body>
  27. </html>

setAttribute()方法

setAttribute() 方法增加一个指定名称和值的新属性,或者把一个现有的属性设定为指定的值。

语法:

  1. elementNode.setAttribute(name,value)

说明:

1.name: 要设置的属性名。

2.value: 要设置的属性值。

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. </head>
  7. <body>
  8. <p id="intro">我的课程</p>
  9. <ul>
  10. <li title="JS">JavaScript</li>
  11. <li title="JQ">JQuery</li>
  12. <li title="">HTML/CSS</li>
  13. <li title="JAVA">JAVA</li>
  14. <li title="">PHP</li>
  15. </ul>
  16. <h1>以下为li列表title的值,当title为空时,新设置值为"WEB前端技术":</h1>
  17. <script type="text/javascript">
  18. var Lists = document.getElementsByTagName("li");
  19. for (var i = 0; i < Lists.length; i++) {
  20. var text = Lists[i].getAttribute('title');
  21. if (text == "") {
  22. Lists[i].setAttribute('title','WEB前端技术');
  23. document.write(Lists[i].getAttribute("title") + "<br>");
  24. }else{
  25. document.write(text + "<br>");
  26. }
  27. }
  28. </script>
  29. </body>
  30. </html>

节点属性

在文档对象模型 (DOM) 中,每个节点都是一个对象。DOM 节点有三个重要的属性 :

  1. nodeName : 节点的名称

  2. nodeValue :节点的值

  3. nodeType :节点的类型

一、nodeName 属性: 节点的名称,是只读的。

  1. 元素节点的 nodeName 与标签名相同
  2. 属性节点的 nodeName 是属性的名称
  3. 文本节点的 nodeName 永远是 #text
  4. 文档节点的 nodeName 永远是 #document

二、nodeValue 属性: 节点的值

  1. 元素节点的 nodeValue 是 undefined 或 null
  2. 文本节点的 nodeValue 是文本自身
  3. 属性节点的 nodeValue 是属性的值

三、nodeType 属性: 节点的类型,是只读的。以下常用的几种结点类型:

元素类型 节点类型
元素 1
属性 2
文本 3
注释 8
文档 9
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>节点属性</title>
  6. </head>
  7. <body>
  8. <ul>
  9. <li>javascript</li>
  10. <li>HTML/CSS</li>
  11. <li>jQuery</li>
  12. </ul>
  13. <script type="text/javascript">
  14. let lis = document.getElementsByTagName('li');
  15. for(let i=0;i<lis.length;i++){
  16. document.write("节点名称为: ") + document.write(lis[i].nodeName) + document.write(" 节点值为: ") + document.write(lis[i].innerText) + document.write(" 节点类型为: ") + document.write(lis[i].nodeType) + document.write("<br>");
  17. }
  18. </script>
  19. </body>
  20. </html>

访问子节点childNodes

访问选定元素节点下的所有子节点的列表,返回的值可以看作是一个数组,他具有length属性。

语法:

  1. elementNode.childNodes

注意:

如果选定的节点没有子节点,则该属性返回不包含节点的 NodeList。

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. </head>
  7. <body>
  8. <div>
  9. javascriptsss
  10. <p>javascript</p>
  11. <div>jQuery</div>
  12. <h5>PHP</h5>
  13. </div>
  14. <script type="text/javascript">
  15. let divs = document.getElementsByTagName('div');
  16. let firstDiv = divs[0].childNodes;
  17. for (let i = 0; i < firstDiv.length; i++) {
  18. if (firstDiv[i].nodeType == 1) {
  19. document.write(firstDiv[i].innerText + "<br>");
  20. }
  21. }
  22. </script>
  23. </body>
  24. </html>

访问兄弟节点

nextSibling / nextElementSibling

previousSibling / previousElementSibling

  1. nextSibling / nextElementSibling 属性可返回某个节点之后紧跟的节点(处于同一树层级中)。

语法:

nodeObject.nextSibling

说明:如果无此节点,则该属性返回 null。

  1. previousSibling / previousElementSibling 属性可返回某个节点之前紧跟的节点(处于同一树层级中)。

语法:

nodeObject.previousSibling

说明:如果无此节点,则该属性返回 null。

两个属性获取的是节点。Internet Explorer 会忽略节点间生成的空白文本节点(例如,换行符号),而其它浏览器不会忽略。

解决问题方法:

  1. 判断节点nodeType是否为1, 如是为元素节点,跳过。
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>nextSibling</title>
  6. </head>
  7. <body>
  8. <ul id="u1">
  9. <li id="a">javascript</li>
  10. <li id="b">jquery</li>
  11. <li id="c">html</li>
  12. </ul>
  13. <ul id="u2">
  14. <li id="d">css3</li>
  15. <li id="e">php</li>
  16. <li id="f">java</li>
  17. </ul>
  18. <script type="text/javascript">
  19. function get_nextSibling(n) {
  20. var x = n.nextSibling;
  21. while (x && x.nodeType != 1) {
  22. x = x.nextSibling;
  23. }
  24. return x;
  25. }
  26. var x = document.getElementsByTagName("li")[0];
  27. document.write(x.nodeName);
  28. document.write(" = ");
  29. document.write(x.innerHTML);
  30. var y = get_nextSibling(x);
  31. if (y != null) {
  32. document.write("<br />nextsibling: ");
  33. document.write(y.nodeName);
  34. document.write(" = ");
  35. document.write(y.innerHTML + "<br>");
  36. } else {
  37. document.write("<br>已经是最后一个节点");
  38. }
  39. function get_previousSibling(n) {
  40. // 这里还有一个参数, previousSibling.
  41. // 但是后面x.nodeType = 3. 注意一下.
  42. var x = n.previousElementSibling;
  43. while (x && x.nodeType != 1) {
  44. x = x.get_previousSibling;
  45. }
  46. return x;
  47. }
  48. var a = document.getElementsByTagName("li")[5];
  49. document.write(a.nodeName);
  50. document.write(" = ");
  51. document.write(a.innerHTML);
  52. var b = get_previousSibling(a);
  53. if (b != null) {
  54. document.write("<br />previousSbling: ");
  55. document.write(b.nodeName);
  56. document.write(" = ");
  57. document.write(b.innerHTML);
  58. } else {
  59. document.write("<br>已经是第一个节点");
  60. }
  61. </script>
  62. </body>
  63. </html>

插入节点

appendChild()

在指定节点的最后一个子节点列表之后添加一个新的子节点

语法

appendChild(newnode)

参数

newnode: 指定追加的节点.

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>无标题文档</title>
  6. </head>
  7. <body>
  8. <ul id="test">
  9. <li>JavaScript</li>
  10. <li>HTML</li>
  11. </ul>
  12. <script type="text/javascript">
  13. var otest = document.getElementById("test");
  14. // 创建元素
  15. var newnode = document.createElement("li"); // 元素类型
  16. newnode.innerText = "newElement PHP";
  17. otest.appendChild(newnode);
  18. </script>
  19. </body>
  20. </html>

insertBefore()

insertBefore() 方法可在已有的子节点前插入一个新的子节点

语法

node.insertBefore(newNode,node);

参数

newNode 要插入的新节点

node 指定此节点前插入新节点

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>insertBefore() 节点前插入新节点</title>
  6. </head>
  7. <body>
  8. <ul id="test">
  9. <li>JavaScript</li>
  10. <li>HTML</li>
  11. </ul>
  12. <script type="text/javascript">
  13. var otest = document.getElementById("test");
  14. var nd = document.getElementsByTagName("li")[1];
  15. // 创建新节点
  16. var newNode = document.createElement("li");
  17. newNode.innerHTML = "insertBefore HTML";
  18. // 指定节点前插入节点.
  19. otest.insertBefore(newNode,nd);
  20. </script>
  21. </body>
  22. </html>

removeChild() 删除节点

removeChild() 方法从子节点列表中删除某个节点. 如果删除成功, 此方法可返回被删除的节点. 如果失败, 则返回NULL

语法

nodeObject.removeChild(node)

参数

node 必须, 指定需要删除的节点.

注意: 把删除的子节点赋值给 x,这个子节点不在DOM树中,但是还存在内存中,可通过 x 操作。如果要完全删除对象,给 x 赋 null 值

  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>清除节点内容</title>
  6. </head>
  7. <body>
  8. <div id="content">
  9. <h1>html</h1>
  10. <h1>php</h1>
  11. <h1>javascript</h1>
  12. <h1>jquery</h1>
  13. <h1>java</h1>
  14. </div>
  15. <script type="text/javascript">
  16. function clearText() {
  17. var content = document.getElementById("content");
  18. var nodeArr = new Array;
  19. var len = 0;
  20. for (var i = 0; i < content.childNodes.length; i++) {
  21. if (content.childNodes[i].nodeType == 1) {
  22. console.log(content.childNodes[i]);
  23. var x = content.removeChild(content.childNodes[i]);
  24. document.write("<br>清除的节点内容为: " + x.innerText + "<br>")
  25. }
  26. }
  27. }
  28. </script>
  29. <button onclick="clearText()">清除节点内容</button>
  30. </body>
  31. </html>

replaceChild() 替换元素节点

replaceChild 实现子节点(对象)的替换. 返回被替换对象的引用.

语法

node.replaceChild(newnode, oldnew)

参数

newnode : 必需,用于替换 oldnew 的对象。
oldnew : 必需,被 newnode 替换的对象。

注意:

  1. 当 oldnode 被替换时,所有与之相关的属性内容都将被移除。
  2. newnode 必须先被建立。
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <meta http-equiv="Content-Type" content="text/html; charset=utf-8">
  5. <title>替换节点内容</title>
  6. </head>
  7. <body>
  8. <div><b id="oldnode">JavaScript</b>是一个很常用的技术,为网页添加动态效果。</div>
  9. <a href="javascript:replaceMessage()"> 将加粗改为斜体</a>
  10. <script type="text/javascript">
  11. function replaceMessage() {
  12. // 创建标签
  13. var newnode = document.createElement('i');
  14. // 创建文本, 这里可以通过ID 获取到 oldnode 中的 innerText
  15. var newnodeText = document.createTextNode(document.getElementById('oldnode').innerText);
  16. // 等同于 var newnodeText = document.createTextNode('javaScript');
  17. // 拼接. 把文本放置在i标签中
  18. newnode.appendChild(newnodeText);
  19. // 获取旧节点
  20. var oldnode = document.getElementById('oldnode');
  21. // 替换node节点
  22. oldnode.parentElement.replaceChild(newnode,oldnode);
  23. }
  24. </script>
  25. </body>
  26. </html>

createElement 创建元素节点

createElement()方法可创建元素节点. 此方法可返回一个Element对象.

语法:

document.createElement(tagName)

参数:

tagName 字符串值, 这个字符串用来指明创建元素的类型.

注意: 要与appendChild() 或 insertBefore() 方法联合使用, 将元素显示在页面中 .

创建一个按钮:

  1. <script type="text/javascript">
  2. var body = document.body;
  3. var input = document.createElement("input");
  4. input.type = "button";
  5. input.value = "创建一个按钮";
  6. body.appendChild(input);
  7. </script>

效果:在HTML文档中,创建一个按钮。

我们也可以使用setAttribute来设置属性,代码如下:

  1. <script type="text/javascript">
  2. var body = document.body;
  3. var btn = document.createElement("input");
  4. btn.setAttribute("type", "text");
  5. btn.setAttribute("name", "q");
  6. btn.setAttribute("value", "使用setAttribute");
  7. btn.setAttribute("onclick", "javascript:alert('This is a text!');");
  8. body.appendChild(btn);
  9. </script>

效果:在HTML文档中,创建一个文本框,使用setAttribute设置属性值。 当点击这个文本框时,会弹出对话框“This is a text!”。

Statement of this Website
The copyright of this blog article belongs to the blogger. Please specify the address when reprinting! If there is any infringement or violation of the law, please contact admin@php.cn Report processing!
All comments Speak rationally on civilized internet, please comply with News Comment Service Agreement
0 comments
Author's latest blog post
About us Disclaimer Sitemap
php.cn:Public welfare online PHP training,Help PHP learners grow quickly!