JavaScript DOM元素常见操作详解【添加、删除、修改等】


Posted in Javascript onMay 09, 2018

本文实例讲述了JavaScript DOM元素常见操作。分享给大家供大家参考,具体如下:

DOM概念

DOM(Document Object Model):文档对象模型。

通过开发者工具的Elements标签页可以查看

通过开发者工具的Sources标签页也可以观察到整个文档是有一系列节点

整个文档是由一系列节点对象组成的一棵树。

节点(Node)包括元素节点(1)、属性节点(2)、文本节点(3)(1..2..3..代表节点类型)_

var th1= document.getElementById("th1");
alert(th1.nodeType);
alert(th1.nodeName);
alert(th1.nodeValue);

th1代表一个元素节点(nodeType=1),nodeName就是标签名(th),元素节点的nodeValue=null。

var attr1=th1.getAttributeNode("name");
alert(attr1.nodeType);
alert(attr1.nodeName);
alert(attr1.nodeValue);

getAttributeNode方法是获取元素的属性节点,此时输出的节点类型为属性节点(2),节点名称就是属性名(name),节点值就是属性值(sex)

var txtl = th1.firstChild;
alert(txtl.nodeType);
alert(txtl.nodeName);
alert(txtl.nodeValue)

txt1是一个文本节点(3),节点名称固定就是#text,节点值就是文本内容。

获取元素

(1)getElementByid

根据元素的id属性来获取元素,获取到的是一个元素。

(2)getElementsByTagName

根据标签名来获取元素,结果是一个元素集合。

(3)getElementsByClassName

根据class属性来获取元素,结果是一个元素集合。

(4)getElementsByName

根据name属性来获取元素,结果是一个元素集合。

总结:获取元素可以根据标签名获取、也可以根据id、name、class属性来获取。根据id属性获取的结果是一个元素,而其它的获取的是一个集合。

document对象支持以上四种,而element对象仅支持getElementsByTagNamegetElementsByClassName

修改元素

(1)修改内容

function fun(){
  //获取到指定元素
  var p1 = document.getElementById("p1");
  p1.innerText = "我被单击了!";
}

通过.innerText属性可读取或设置标签的内容文本

function fun(){
  //获取到指定元素
  var p1 = document.getElementById("p1");
  p1.innerHTML = "我被单击了!<br>换行了";
}

也可以通过innerHTML属性获取或设置内容文本

俩者的区别:innerHTML会按照HTML规则解析文本,而innerText只是当做普通文本内容。

(1)  修改样式

A.xxx.style.属性名=“值”

B.xxx.classname=“…”(相当于修改了class的属性)

<style>
    .style1{
      color:red;
      font-size:20px;
      text-decoration:underline;
    }
    .style2{
      color:blue;
      font-size:32px;
      text-decoration:line-through;
    }
  </style>
</head>
<body>
<p id="p1">修改样式测试</p>
<input type="button"value="样式一"onclick="style1()">
<input type="button"value="样式二"onclick="style2()">
</body>
<script>
  var p1 = document.getElementById("p1");
  function style1(){
    p1.className = "style1"
  }
  function style2(){
    p1.className = "style2"
  }
</script>
</html>

添加删除元素

(1)CreateElement建一个元素节点

CreateElement("p")创建一个段落

(2)createTextNode创建一个文本节点

createTextNode("文本内容"),创建一个值为“文本内容”的文本节点.

(3)appendChild添加子节点

(4)removeChild  删除子节点

动态添加

<body>
<div id="div1">
</div>
<input type="button"value="添加段落"onclick="add()">
</body>
<script>
//全局变量
  var index = 1;
  function add(){
    //创建一个段落标签
    var p = document.createElement("p");
    //创建文本节点
    var content= "第"+index+"段落";
    var txt = document.createTextNode(content);
    //创建文本节点添加的段落
    p.appendChild(txt);
    //将段落添加到div中
    var div1 = document.getElementById("div1");
    div1.appendChild(p);
    index++
  }
</script>

动态删除

<body>
<div id="div1">
  <p id="p1">第1段落 </p>
  <p id="p2">第2段落 </p>
  <p id="p3">第3段落 </p>
  <p id="p4">第4段落 </p>
</div>
<input type="button"value="删除第二段"onclick="del()">
</body>
<script>
  function del(){
    //先找到父节点
    var div1 = document.getElementById("div1");
    //再找到要删除的节点
    var p2 = document.getElementById("p2");
    //将要删除的节点从父节点中移除
    div1.removeChild(p2);
  }
</script>
</html>

这种方法是分别找到父节点和要删除的节点,然后执行删除操作。该方法的一个前提是知道父节点是谁

那么如果并不知道父节点是谁,该如何删除呢

p2.parentNode.removeChild(p2);

这个方法并不需要父节点是谁

动态的添加和删除:

动态添加和动态删除,删除动态添加的奇数段落

思路1:获取div1 下的所以段落,遍历所以的段落,将序号为奇数的段落删除。

function del(){
  var div1 = document.getElementById("div1");
  var paras = div1.getElementsByTagName("p");
  for(var i in paras){
    if((i+1)%2 == 1){
      div1.removeChild(paras[i]);
    }
  }
}

这种在初始时是可以的,但是随着动态添加或删除的进行,后面的结果就不对了。因为动态删除操作就影响了原来的顺序,而程序是按照序号去判断奇偶性,所以出现误判

思路2:添加通过设置class属性,然后通过getElementsByclassName来获取奇数行

(也可以从后往前删)

<body>
<div id="div1">
</div>
<input type="button" value="添加段落" onclick="add()">
<input type="button" value="删除奇数第二段" onclick="de1()">
</body>
<script>
  var index = 1;
  function add(){
    //创建一个段落标签
    var p = document.createElement("p");
    //创建文本节点
    var content = "第" + index + "段落";
    var txt = document.createTextNode(content);
    //将文本节点添加到段落
    p.appendChild(txt);
    if (index % 2 == 1) {
      p.setAttribute("class","odd");
    }
    //将段落添加到div中
    var div1 = document.getElementById("div1");
    div1.appendChild(p);
    index++;
  }
  /*function de1(){
   var div1 = document.getElementById("div1");
   var paras =div1.getElementsByTagName("p");
   for(var i in paras){
   if((i+1)%2 == 1){
   div1.removeChild(paras[i]);
   }
   }
   }*/
  functionde1() {
    var div1 = document.getElementById("div1");
    var paras = div1.getElementsByClassName("odd");
//    varparas = document.getElementsByName("odd");
    for (var i = paras.length - 1; i >= 0; i--) {
      div1.removeChild(paras[i]);
    }
  }
</script>
</html>

导航

Document:是根节点

ParentNode:获取父节点

childNodes:获取所有子节点

firstChild:第一个子节点

lastChlid:获取最后一个子节点

</head>
<body>
<div name="第一章">
   <p id="p1">第一段<span>第一句</span><span>第二句</span></p>
</div>
<input type="button"value="获取父节点的name属性"onclick="fun1()">
<input type="button"value="显示p1子节点的个数"onclick="fun2()">
<input type="button"value="显示p1第一个子节点的类型"onclick="fun3()">
<input type="button"value="显示p1最后一个子节点的类型"onclick="fun4()">
</body>
<script>
var p1 =document.getElementById("p1");
function fun1(){
  var value=p1.parentNode.getAttribute("name");
  alert(value);
}
function fun2(){
  var chlids = p1.childNodes;
  alert(chlids.length)
}
function fun3(){
  alert(p1.firstChild.nodeType);
}
function fun4(){
  alert(p1.lastChild.nodeType);
}
</script>
</html>

希望本文所述对大家JavaScript程序设计有所帮助。

Javascript 相关文章推荐
js实现点小图看大图效果的思路及示例代码
Oct 28 Javascript
JS小功能(offsetLeft实现图片滚动效果)实例代码
Nov 28 Javascript
浅谈下拉菜单中的Option对象
May 10 Javascript
Jquery和angularjs获取check框选中的值的方法汇总
Jan 17 Javascript
jQuery实现选项联动轮播效果【附实例】
Apr 19 Javascript
jQuery 全选 全部选 反选 实现代码
Aug 17 Javascript
jquery实现input框获取焦点的简单实例
Jan 26 Javascript
网页爬虫之cookie自动获取及过期自动更新的实现方法
Mar 06 Javascript
通过jquery的ajax请求本地的json文件方法
Aug 08 jQuery
在Vant的基础上封装下拉日期控件的代码示例
Dec 05 Javascript
微信小程序简单的canvas裁剪图片功能详解
Jul 12 Javascript
WebStorm无法正确识别Vue3组合式API的解决方案
Feb 18 Vue.js
Vue中使用vee-validate表单验证的方法
May 09 #Javascript
VeeValidate在vue项目里表单校验应用案例
May 09 #Javascript
vue实现2048小游戏功能思路详解
May 09 #Javascript
vue中父子组件注意事项,传值及slot应用技巧
May 09 #Javascript
vue中的provide/inject的学习使用
May 09 #Javascript
详解Vue 多级组件透传新方法provide/inject
May 09 #Javascript
自定义vue组件发布到npm的方法
May 09 #Javascript
You might like
phpexcel导入excel数据使用方法实例
2013/12/24 PHP
ThinkPHP使用心得分享-分页类Page的用法
2014/05/15 PHP
thinkphp特殊标签用法概述
2014/11/24 PHP
smarty循环嵌套用法示例分析
2016/07/19 PHP
Yii实现文章列表置顶功能示例
2016/10/18 PHP
php使用函数pathinfo()、parse_url()和basename()解析URL
2016/11/25 PHP
基于jQuery的固定表格头部的代码(IE6,7,8测试通过)
2010/05/18 Javascript
用JavaScript对JSON进行模式匹配 (Part 2 - 实现)
2010/07/17 Javascript
jQuery(1.6.3) 中css方法对浮动的实现缺陷分析
2011/09/09 Javascript
JavaScript操作选择对象的简单实例
2016/05/16 Javascript
Bootstrap轮播插件中图片变形的终极解决方案 使用jqthumb.js
2016/07/10 Javascript
AngularJS基础 ng-href 指令用法
2016/08/01 Javascript
AngularJS解决ng界面长表达式(ui-set)的方法分析
2016/11/07 Javascript
Node.js 使用流实现读写同步边读边写功能
2017/09/11 Javascript
javascript操作元素的常见方法小结
2019/11/13 Javascript
python虚拟环境 virtualenv的简单使用
2020/01/21 Javascript
[01:59][TI9趣味视频] 全明星赛奖励
2019/08/23 DOTA
python简单猜数游戏实例
2015/07/09 Python
Django接受前端数据的几种方法总结
2016/11/04 Python
Python实现二分查找与bisect模块详解
2017/01/13 Python
Python IDLE 错误:IDLE''s subprocess didn''t make connection 的解决方案
2017/02/13 Python
解决Python的str强转int时遇到的问题
2018/04/09 Python
python基于http下载视频或音频
2018/06/20 Python
python实现周期方波信号频谱图
2018/07/21 Python
Python自定义一个类实现字典dict功能的方法
2019/01/19 Python
Python 实现输入任意多个数,并计算其平均值的例子
2019/07/16 Python
最新2019Pycharm安装教程 亲测
2020/02/28 Python
Django def clean()函数对表单中的数据进行验证操作
2020/07/09 Python
Python实现扫码工具的示例代码
2020/10/09 Python
瑞典领先的汽车零部件网上零售商:bildelaronline24.se
2017/01/12 全球购物
vue路由实现登录拦截
2021/03/24 Vue.js
党务公开方案
2014/05/06 职场文书
高一语文教学反思
2016/02/16 职场文书
超市啤酒狂欢夜策划方案范文!
2019/07/03 职场文书
导游词之西江千户苗寨
2019/12/24 职场文书
OpenCV实现常见的四种图像几何变换
2022/04/01 Python