DOM节点分为三大类:元素节点(标签节点),属性节点,文本节点。

属性节点和文本节点都属于元素节点的子节点,因此操作时,需要选中元素节点,在修改属性和文本。

(一)、查看元素节点。

1.使用getElement系列方法:

  1. var li=document.getElementById("first");
  2. var lis1=document.getElementsByClassName("cls");
  3. var lis1=document.getElementsByName("name");
  4. var lis1=document.getElementsByClassName("li");

2.注意事项:

①ID不能重名,如果ID重名,只能取到第一个。

②获取元素节点时,必须等到DOM树加载完成后才能获取。

 两种方式:a.将JS写在文档最后b.将代码写入window.onload函数中。

③通过getElements系列取到的为数组格式,操作时必须取到其中的每一个元素,才能进行操作,而不能直接对数组进行操作。

  1. document.getElementsByTagName("li").click=function(){}×
  2. document.getElementsByTagName("li")[0].click=function(){}√

④这一系列方法,也可以先选中一个DOM节点,再从选中的DOM节点中,选择需要的节点:

  1. document.getElementById("div1").getElementsByTagName("li");

3.通过querySelector系列方法:

①传入一个选择器名称,返回第一个找到的元素,通常用于查找ID。

  1. var dq1=document.querySelector("#first");

②传入一个选择器名称,返回所有找到的元素,无论找到几个,都返回数组格式。

  1. var dqs1=document.querySelectorAll("#div1 li");

(二)、查看设置属性节点。

1.查看属性节点:.getAttribute("属性名");

2.设置属性节点:.setAttribute("属性名","属性值");

3.注意事项:.setAttribute()在老版本IE中会存在兼容性问题。

(三)、JS修改CSS的多种方式:

1.使用setAttribute设置class和style。

  1. document.getElementById("first").setAttribute("style","color:red");
  2. document.getElementById("first").setAttribute("class","class1");

2.使用.className添加一个class选择器。

  1. document.getElementById("first").className="class2";

3.使用.style.样式直接修改单个样式,注意样式名必须使用驼峰命名法。

  1. document.getElementById("first").style.size="20px";

4.使用.style或.style.cssText添加一串行级样式。

  1. document.getElementById("first").style="color:red";//IE不兼容
  2. document.getElementById("first").style.cssText="color:red;";

(四)、查看和设置文本节点。

1.innerHTML:取到或设置一个检点的HTML代码。

  1. var span=document.getElementById("first").innerHTML;
  2. document.getElementById("first").innerHTML="<a href=''>哈哈<a/>"

(一)、层次节点操作。

1.childNodes:获取当前节点的所有元素子节点,(不包括元素子节点和文本节点。)

2.children:获取当前节点的所有元素子节点(不包括文本节点。)

3.parentNode:获取当前节点的父节点。

4.firstChild:获取第一个子节点,包括回车等文本节点

5.firstElementChild:获取第一个元素节点,不含文本节点

6.previousSibling:获取当前节点的兄弟节点,包括文本节点。

7.previousElementSibling:获取当前节点的前一个元素兄弟节点。

8.nextElementSibling:同理

9.attributes:获取当前节点的所有属性节点,返回数组格式。

  1. //《body》
  2.      <div >
  3. <p>前</p>
  4. <ul id="ul1">
  5. <li>天花板</li>
  6. <li>绿衣服</li>
  7. <li>马桶</li>
  8. <li>水草</li>
  9. </ul>
  10. <p>后</p>
  11. </div>
  1. //以下所有与获取节点有关的语句都要在DOM树加载完成后执行,放在window.onload里面
  2. window.onload=function(){
  3. var ul=document.getElementById("ul1");
  4. //获取节点有关的语句操作(以下语句插入)
  5. console.log(li);
  6. }
  1. var li=ul.childNodes;//li,text
  2. var li=ul.children;//li
  3. var li=ul.lastChild;//text
  4. var li=ul.firstChild;//text
  5. var li=ul.firstElementChild;//li内容
  6. var li=ul.lastElementChild;//li内容
  7. var li=ul.previousSibling;//text
  8. var li=ul.previousElementSibling;//text前的元素例:<p>前
  9. var li=ul.nextElementSibling;//text后的元素例:<p>后
  10. var li=ul.attributes;//获取当前节点的所有属性节点,返回数组格式。
  1. var body=ul.parentNode;//整体
  2. console.log(body);

(二)、创建并新增节点。

1.document.createElement("标签名");创建一个新节点,并将创建的新节点返回。

 需要配合.setAttribute()为新节点设置属性。

2.使用父节点.insertBefore(新节点,目标节点);在父节点中,将新节点插入到目标节点之前。

 父节点.appendChild():在父节点的内部最后,插入一个新节点。

3.源节点:.cloneNode(true):克隆源节点。

 传入true表示克隆源节点以及源节点的所有子节点;

 传入false或不传,表示只能克隆当前节点,而不克隆子节点。

(三)、删除、替换节点。

1.父节点.removeChild(子节点):从父节点中,删除指定子节点。

2.父节点.replaceChild(新节点,老节点);从父节点中,用新的节点替换老节点。

  1. <body>
  2. <button onclick="appendImg()">在之后插入</button>
  3. <button onclick="addImg()">插入一张图片</button>
  4. <button onclick="addWord()">插入一段文字</button>
  5. <button onclick="cloneUL()">克隆UL</button>
  6. <button onclick="delUL()">删除UL</button>
  7. <button onclick="replaceUL()">代替UL</button>
  8.  
  9. <div >
  10. <p></p>
  11. <ul id="ul1">
  12. <li>天花板</li>
  13. <li>绿衣服</li>
  14. <li>马桶</li>
  15. <li>水草</li>
  16. </ul>
  17. <p></p>
  18. </div>
  19.  
  20. </body>
  1. //在ul标签之前p标签之后添加图。
    function addImg(){
  2. var img=document.createElement("img");
  3. img.setAttribute("src","../../01-HTML基本标签/img/Female.gif");
  4. var ul=document.getElementById("ul1");
  5. document.getElementsByTagName("div")[0].insertBefore(img,ul);//div
  6. }
  1. //在ul标签之前p标签之后添加文字。
    function addWord(){
  2. var q=document.createElement("p");
  3. q.innerHTML="哈哈1";
  4. var ul=document.getElementById("ul1");
  5. document.getElementsByTagName("div")[0].insertBefore(q,ul);
  6. }
  1. //追加图
    function appendImg(){
  2. var img=document.createElement("img");
  3. img.setAttribute("src","../../01-HTML基本标签/img/Female.gif");
  4. var ul=document.getElementById("ul1");
  5. document.getElementsByTagName("div")[0].appendChild(img,ul);//div
  6. }
  1. //克隆
    function cloneUL(){
  2. var newUl=ul1.cloneNode(true);
  3. document.getElementsByTagName("div")[0].appendChild(newUl);
  4. }
  1. //删除
    function delUL(){
  2. document.getElementsByTagName("div")[0].removeChild(ul1);
  3. }
  1. //替换
    function replaceUL(){
  2. var img=document.createElement("img");
  3. img.setAttribute("src","../../01-HTML基本标签/img/Female.gif");
  4. document.getElementsByTagName("div")[0].replaceChild(img,ul1);
  5. }

(一)、HTML表中的对象有三种:

1.表格对象:

  1. var table=document.getElementById("table");

2.行对象:table.rows[0]

3.单元格对象:table.rows[0].cells

(二)、表格对象中的属性和方法。

1.rows属性:返回当前表格的所有行,为数组格式。

2.insertRow(index):在表格的index行,插入一个新行,返回新产生的行对象。

3.table.deleteRow(index);删除表格的index行。

(三)、行对象中的属性和方法。

1.cells属性返回当前行中的所有单元格对象,为数组格式。

2..rows[index].index:返回当前行在表中的下标

3..rows[3].insertCell(1):表示在行中的index位置插入一个新单元格,返回新产生的单元格对象。

4..table.rows[3].deleteCell(3);表示删除本行中的第index个单元格。

5..table.rows[0].cells[0].cellIndex;返回当前单元格在本行中的下标。

(四)、单元格对象中的属性和方法。

innerHTML   innerText   className  style.color

  1. var table=document.getElementById("table");
  2. console.log(table.rows[0]);//返回第一行
  3.  
  4. console.log(table.rows[0].cells[0]);//第一行第一列
  5.  
  6. var tr=table.insertRow(2);//在下标为2的行插入新行
  7. console.log(tr);
  8.  
  9. console.log(table.deleteRow(2));//删除下标为2的行
  10. console.log(table.rows[3].rowIndex);//
  11. console.log(table.rows[3].insertCell(1));
  12. //在下标为3的位置插入一个单元格第一个格子之后
  13. table.rows[3].deleteCell(1);//删除了下标为3,1的单元格
  14. console.log(table.rows[0].cells[0].cellIndex);//

(五)、练习。

  1. <!DOCTYPE html>
  2. <html>
  3.  
  4. <head>
  5. <meta charset="UTF-8">
  6. <title></title>
  7. <style type="text/css">
  8. table {
  9. border-collapse: collapse;
  10. width: 300px;
  11. }
  12.  
  13. table td,
  14. th {
  15. border: solid 1px black;
  16. }
  17. </style>
  18. </head>
  19.  
  20. <body>
  21. <table id="table">
  22. <tr>
  23. <th>书名</th>
  24. <th>价格</th>
  25. </tr>
  26. <tr>
  27. <td>看得见风景的房间</td>
  28. <td>30</td>
  29. </tr>
  30. <tr>
  31. <td>幸福从天而降</td>
  32. <td>30</td>
  33. </tr>
  34. <tr>
  35. <td>60个瞬间</td>
  36. <td>30</td>
  37. </tr>
  38. <tr>
  39. <td>合计</td>
  40. <td>0</td>
  41. </tr>
  42. </table><br />
  43. <button onclick="addRow()">表格最后新增一行</button>
  44. <button onclick="delRow()">删除表格最后一行</button>
  45. <button onclick="copyRow()">复制表格最后一行</button>
  46. <button onclick="getSum()">求和</button>
  47.  
  48. <script type="text/javascript">
  49. var table = document.getElementById("table");
  50. window.onload = function() {
  51. getSum();
  52. }
  53.  
  54. function addRow() {
  55.  
  56. var name = prompt("请输入书名");
  57. var newTr = table.insertRow(table.rows.length - 1);
  58. newTr.insertCell(0).innerText = name;
  59. var price = prompt("请输入价格");
  60. newTr.insertCell(1).innerText = price;
  61.  
  62. }
  63.  
  64. function delRow() {
  65. // table.deleteRow(table.rows.length-2);
  66. if(table.rows.length > 2)
  67. table.deleteRow(table.rows.length - 2);
  68. else
  69. alert("没啦!憋删了!");
  70.  
  71. getSum();
  72.  
  73. }
  74. function copyRow() {
  75.  
  76. if(table.rows.length > 2) {
  77. var td = table.rows[table.rows.length - 2];
  78. var newTr = table.insertRow(table.rows.length - 1);
  79. newTr.insertCell(0).innerText = td.cells[0].innerText;
  80. newTr.insertCell(1).innerText = td.cells[1].innerText;
  81. } else {
  82. alert("没有可复制的行!");
  83. }
  84. getSum();
  85.  
  86. }
  87.  
  88. function getSum() {
  89. var rows = table.rows;
  90. var sum = 0;
  91. for(var i = 1; i < rows.length - 1; i++) {
  92. var price = parseFloat(rows[i].cells[1].innerText);
  93. sum += price;
  94. }
  95. rows[rows.length - 1].cells[1].innerText = sum + "元";
  96.  
  97. }
  98. </script>
  99. </body>
  100.  
  101. </html>

JS基础速成(三)- DOM(文件对象模型)的更多相关文章

  1. HTML 之 DOM文件对象模型

    文件对象模型 (DOM: Document Object Model) DOM 是 W3C定义的一种访问文档的标准. "The W3C Document Object Model (DOM) ...

  2. JS基础速成(二)-BOM(浏览器对象模型)

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.BOM(浏览器对象模型) 1.screen对象. console.lo ...

  3. JS基础速成(一)

    .t1 { background-color: #ff8080; width: 1100px; height: 40px } 一.JS的变量 1.变量的声明 var num=1;//使用var生命的变 ...

  4. JS基础(三)

    25.使用JS操作CSS样式 DHTML表示动态HTML(Dynamic HTML,DHTML),不是标记语言,只是一种由微软提出的网页脚本化概念,目标是结合JS+HTML+CSS设计动态特效,得到很 ...

  5. Python之路:Python 基础(三)-文件操作

    操作文件时,一般需要经历如下步骤: 打开文件 操作文件 一.打开文件 文件句柄 = file('文件路径', '模式') # 还有一种方法open 例1.创建文件  f = file('myfile. ...

  6. Three.js基础探寻三——透视投影照相机

    本篇主要介绍Three.js照相机中的透视投影照相机. 上一篇:正交投影照相机 5.透视投影照相机构造函数 透视投影照相机(Perspective Camera)的构造函数是: THREE.Persp ...

  7. ASP.NET Core 2.2 基础知识(三) 静态文件

    什么是静态文件? HTML,CSS,JS,图片等都叫做静态文件. 要想提供静态文件给客户端,需要注册静态文件中间件. 我们先分别添加一个 WebAPI 项目,一个 Razor 视图项目,比较两个项目的 ...

  8. ruby 基础知识三 读写文件

    1.File 中参数的含义 r 只读模式.文件指针被放置在文件的开头.这是默认模式. r+ 读写模式.文件指针被放置在文件的开头. w 只写模式.如果文件存在,则重写文件.如果文件不存在,则创建一个新 ...

  9. js基础练习三之数码时钟

    这章节有两个实例,1,定时器的使用; 2,数码时钟; 用到的js知识:定时器,Date对象. >>>>>定时器 开启定时器: setInterval 间隔型 setTim ...

随机推荐

  1. Centos6.6上源码安装Nodejs V4版本

    本来就是想在vps上装一个Ghost博客,这个博客依赖的是Nodejs,然后推荐的是V4版本.然后我就对着官网的步骤安装,发现根本没有Centos6 i386的资源了(64位的还是有的), 我只能在那 ...

  2. React实现动画效果

    流畅.有意义的动画对于移动应用用户体验来说是非常必要的.和React Native的其他部分一样,动画API也还在积极开发中,不过我们已经可以联合使用两个互补的系统:用于全局的布局动画LayoutAn ...

  3. 关于NOR_FLASH的大小在单片机程序中的应用

    在单片机开发中,NOR_FLASH常用的有4M和8M的大小: 4M的FLASH在程序中可以这样表示:Ptr < 0x220000 8M的FLASH在程序中可以这样表示:Ptr < 0x40 ...

  4. ROS_Kinetic_14 ROS工具roswtf的基本使用方法等

    ROS_Kinetic_14 ROS工具roswtf的基本使用方法 官网教程:http://wiki.ros.org/cn/ROS/Tutorials/Getting%20started%20with ...

  5. C++为什么要设计友元函数和友元类

    1. 首先要提一下java,比如java定义一个类1.class,会生成字节码.java有反射机制,可以找到类对象,直接修改类的私有属性.逐渐反射机制成为了一种标准,sun做成标准,JDK的API函数 ...

  6. Linux Debugging(七): 使用反汇编理解动态库函数调用方式GOT/PLT

    本文主要讲解动态库函数的地址是如何在运行时被定位的.首先介绍一下PIC和Relocatable的动态库的区别.然后讲解一下GOT和PLT的理论知识.GOT是Global Offset Table,是保 ...

  7. [Python]网络爬虫(三):异常的处理和HTTP状态码的分类

    先来说一说HTTP的异常处理问题. 当urlopen不能够处理一个response时,产生urlError. 不过通常的Python APIs异常如ValueError,TypeError等也会同时产 ...

  8. Css详解之(选择器)

    <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/ ...

  9. (NO.00001)iOS游戏SpeedBoy Lite成形记(三十):增加排行榜功能3

    在这个例子中,我们的显示代码只需要选手的名字以及对应的成绩.根据选手名字取对应的成绩可以用前面实现的playerRecord:方法,我们只需要将按照成绩排序后的选手名字返回就可以了. 我只需要再实现一 ...

  10. 图形绘制中的PorterDuffXfermode

    1.概述 在android图形渲染中 会使用到图像混合模式 <span style="font-size:18px;">setXfermode(Xfermode xfe ...