1 什么是DOM

全称 Document Object Model 文档对象模型。

一个web页面的展示,是由html标签组合成的一个页面,dom对象实际就是将html标签转换成了一个文档对象。可以通过dom对象中js提供的方法,找到html的各个标签。通过找到标签就可以操作标签使页面动起来,让页面动起来。

2 获取标签

 // 直接获取标签

 document.getElementById('i1'); //获取id为i1的标签

 document.getElementsByTagName('div'); //根据标签名称获得标签数组

 document.getElementsByClassName('c1'); //根据class属性获取标签的数组

 document.getElementsByName('dsx'); //根据name属性获取标签数组

 // 间接获取标签

 var tmp=document.getElementById('h-test');

 tmp.parentElement; // 父节点标签元素

 tmp.children; //所有子标签

 tmp.firstElementChild; //第一个子标签元素

 tmp.lastElementChild; // 最后一个子标签元素

 tmp.nextElementSibling; //下一个兄弟标签元素

 tmp.previousElementSibling; //上一个兄弟标签元素

3 操作标签

3.1 文本内容操作

 //innerHTML与innerText

 tmp.innerText; // 获取标签中的文本内容

 tmp.innerText='老铁双击666'; //更改标签内文本内容

 tmp.innerHTML; // 获取标签中的所有内容,包含html代码

 tmp.innerHTML = '<a href="http://www.imdsx.cn">大师兄</a>' // innerHTML 可以将含有HTML代码的字符串变为标签

 //input、textarea标签

 tmp.value; //获取input、textarea参数

 tmp.value = '内容' // 对input、textarea的内容进行赋值

 //select标签

 tmp.value; //获取select标签的value参数

 tmp.value = '选项' // 修改select选项

 tmp.selectedIndex; // 获取select标签的选项下标

 tmp.selectedIndex = 1 // 通过下标更改select的选项

3.2 事件

  • 直接绑定

直接在标签中绑定事件

 <input type="button" value="提交" style="float:left;margin-top: 16px" ondblclick="showValueD();">

 //this代指当前这个操作的标签
<input type="button" value="提交" style="float:left;margin-top: 16px" ondblclick="showValueD(this);"> // function接收this,通过查找父级,兄弟,子级来定位操作的元素
function showValueD(ths) { alert(ths.previousElementSibling.value); }
  • 间接绑定

通过JavaScript获取到需要绑定事件的标签,obj.onclick=function(){} 绑定事件

var obj = document.getElementById('onmouse');
obj.onmouseover = function () { obj.style.background = 'red'; }; // 间接绑定的this代指,getElementById找到的这个标签
var obj = document.getElementById('onmouse');
obj.onmouseout = function () { this.style.background = ''; } //装逼绑定 支持同一个操作执行不同的两段代码
var obj = document.getElementById('onmouse');
obj.addEventListener('click', function () { console.log(111) }, false) onfocus() //获取光标时做操作
onblur() //失去焦点做操作
onclick() //单击时做操作
ondblclick() //双击时操作
onmouseover() //鼠标悬浮触发操作
onmouseout() //鼠标离开悬浮时触发操作

3.3 操作样式

 tmp.className = 'c1'; // 更改标签class属性 只能有一个class属性

 tmp.classList;// 获取样式数组

 tmp.classList.add('aaa'); //添加样式 数组

 tmp.classList.remove('aaa'); //删除样式

 tmp.checked; //获取checkbox的状态 true为勾选

 操作单独样式

 style.xxx //操作样式的粒度更加细化,操作单个样式属性,相当于在标签中增加一个style属性

 style.backgroundColor // 例:在css中样式可以通过【-】进行连接,在JavaScript中,所有的【-】都被去掉,【-】后面的第一个字符大写
className: 字符串形式的class名
classList: 列表形式的class名
add(): 对列表的样式进行增加
remove(): 对列表的样式进行删除

 

3.4 操作属性

 tmp.setAttribute(key,value) //设置属性,在标签中添加属性或自定义属性

 tmp.removeAttribute(key) //删除属性,在标签中删除指定属性

 tmp.attributes //获取标签的所有属性

 //我们在做selemium的时候,都需要定位到标签。但是对于display:none的,就获取不到,此时就需要先把该属性去掉,然后才能操作

3.5 创建标签

 createElement(tagName) //通过DOM创建一个标签对象

 appendChild(tagObj) //在父级标签内添加一个子标签对象

 //字符串方式创建标签

 insertAdjacentHTML(where, tagStr) //父级标签内或外添加一个子、兄标签

 beforeBegin //插入到获取到标签的前面

 afterBegin //插入到获取到标签的子标签的前面

 beforeEnd //插入到获取到标签的子标签的后面

 afterEnd //插入到获取到标签的后面

例:在文本框前加一个下拉框

 var tmp = document.getElementById('ctl00_MainContent_chkissuspiciouscustomremark')
var s = document.createElement('select')
s.innerHTML = '<option value ="volvo">Volvo</option><option value ="saab">Saab</option>'
tmp.insertAdjacentElement('beforeBegin',s)

3.6 其他操作

 console.log(msg) //打印数据

 alert() //弹框提示

 confirm() //确认弹框,返回true or false

 location.href //获取当前的url

 location.href = 'http://www.imdsx.cn' //重定向

 location.reload() //刷新

 location.href = location.href //刷新

【前端】DOM操作的更多相关文章

  1. 前端dom操作竟然使得http请求的时间延长了

    最近在项目中遇到了一个奇怪的问题:在google浏览器的调试窗口network下看到一个请求的时间一直是2s多,但是当我把这个请求单独拿出来执行的时候发现根本用不了2s,100多毫秒就完成了.最后再不 ...

  2. 6、前端--DOM操作(查找标签、节点操作、获取值操作、class操作、样式操作、绑定事件、内置参数this)

    DOM操作之查找标签 前缀关键字>>>:document # 基本查找(核心) document.getElementById 根据ID获取一个标签 document.getElem ...

  3. 从DOM操作看Vue&React的前端组件化,顺带补齐React的demo

    前言 接上文:谈谈我对前端组件化中“组件”的理解,顺带写个Vue与React的demo 上次写完博客后,有朋友反应第一内容有点深,看着迷迷糊糊:第二是感觉没什么使用场景,太过业务化,还不如直接写Vue ...

  4. 前端页面卡顿?或是DOM操作惹的祸,需优化代码

    文档对象模型(DOM)是一个独立 于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得 DOM成为了JavaSc ...

  5. 前端页面卡顿、也许是DOM操作惹的祸?

    界面上UI的更改都是通过DOM操作实现的,并不是通过传统的刷新页面实现 的.尽管DOM提供了丰富接口供外部调用,但DOM操作的代价很高,页面前端代码的性能瓶颈也大多集中在DOM操作上,所以前端性能优化 ...

  6. Web前端开发最佳实践(13):前端页面卡顿?可能是DOM操作惹的祸,你需要优化代码

    文档对象模型(DOM)是一个独立于特定语言的应用程序接口.在浏览器中,DOM接口是以JavaScript语言实现的,通过JavaScript来操作浏览器页面中的元素,这使得DOM成为了JavaScri ...

  7. 前端性能优化--为什么DOM操作慢? 浅谈DOM的操作以及性能优化问题-重绘重排 为什么要减少DOM操作 为什么要减少操作DOM

    前端性能优化--为什么DOM操作慢?   作为一个前端,不能不考虑性能问题.对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩( ...

  8. 前端JavaScript(3)-关于DOM操作的相关案例,JS中的面向对象、定时器、BOM、位置信息

    小例子: 京东购物车 京东购物车效果: 实现原理: 用2个盒子,就可以完整效果. 先让上面的小盒子向下移动1px,此时就出现了压盖效果.小盒子设置z-index压盖大盒子,将小盒子的下边框去掉,就可以 ...

  9. 前端javascript之BOM、DOM操作、事件

    BOM与DOM操作 BOM 浏览器对象模型>>>:使用js操作浏览器 DOM 文档对象模型>>>:使用js操作前端页面 window对象 所有浏览器都支持 wind ...

  10. 前端dom元素的操作优化建议

    参考自:http://blog.csdn.net/xuexiaodong009/article/details/51810252 其实在web开发中,单纯因为js导致性能问题的很少,主要都是因为DOM ...

随机推荐

  1. MySQL 常用报错注入原理分析

    简介 这段时间学习SQL盲注中的报错注入,发现语句就是那么两句,但是一直不知道报错原因,所以看着别人的帖子学习一番,小本本记下来 (1) count() , rand() , group by 1.报 ...

  2. django项目部署过程

    django项目部署过程 1.上传代码 用git或者其他工具,如scp 代码上传后保证每个应用下的migrations文件夹里只有一个__init__.py文件,自己的迁移文件不要上传上来,具体的gi ...

  3. linux使用ltrace和strace跟踪程序执行过程

    yum install strace yum install ltrace 1.strace  ping -c 1 www.baidu.com 2.ltrace  ping -c 1 www.baid ...

  4. 关于Unity3D中的SerialField这个Attribute的功能

    首先我们看看效果,以下是源文件的内容: 然后对应的面板: 要注意的地方其实就这里: 可以看出,public默认就可以在面板中进行修改,相应的设为private的isCreateSoldier却不会出现 ...

  5. vue+egg.js+mysql一个前后端分离留言板项目

    一.前序 我相信每个人前端搬运工和我想法都是一样的,都有一个做全栈的梦,无奈面对众多的后台语言,却不从下手,今天由我来带你们潜入全栈的门槛,注意是门槛.能不能学的会后面的内容全靠坚持了. 我今天主要做 ...

  6. 红帽学习笔记[RHCSA] 第一课[Shell、基础知识]

    关于Shell Shell是什么 Shell是系统的用户界面,提供了用户与内核进行交互操作的一种接口.它接收用户输入的命令并把它送入内核中执行. bash shell是大多数Linux的缺省shell ...

  7. JAVA基础面向对象分析

    面向对象内存的分析: 一:内存的分类 1:栈(tack) 2:堆(heop) 3: 静态区 4:代码区 二:引用数据类型内存特点 三:引用数据类型传值的特点 四:引用数据类型在作为参数时的特点 面向对 ...

  8. Python web 面试题(一)

    1.列举django的内置组件? url .view.model.template.中间件 2.列举django中间件的5个方法?以及django中间件的应用场景? process_request(s ...

  9. SpringBoot配置属性之Server参数

    server配置server.address指定server绑定的地址 server.compression.enabled是否开启压缩,默认为false. server.compression.ex ...

  10. 关于golang的label

    1 label所在的代码段在没有跳转的时候按照所在的位置按顺序执行 2 break label和continue label可以一次性从多重循环中跳出 3 goto label的用法和c/c++中的一 ...