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. python - 简单化list的 For[if] 语句

    python的list数据 >>>a=[, , , , , , ] >>>b=a >>>b [, , , , , , ] 用这种方式将a.list ...

  2. back()是返回,也就是说,先加载地址到A页面,再打开页面到B页面,调用 back()方法,就返回到了A页面

    from selenium import webdriverdriver=webdriver.Firefox()driver.maximize_window()driver.get('http://w ...

  3. Java中个容器的对比

    List: 有序,列表存储,元素可重复 Set: 无序,元素不可重复 Map:无序,元素可重复,key不能重复 LinkedList :链表,删除和添加效率很高,随机访问效率较ArrayList类低, ...

  4. sentos7忘记root密码,重置密码

    一.两种模式:单用户模式和救援模式 下面示例救援模式 1.重启linux系统主机并出现引导界面,按e键进入内核编辑界面: 2.在linux16参数那一行的最后面追加“rd.break”参数,记住要空开 ...

  5. linux/linux学习笔记-常用命令(mooc)

    一.命令基本格式及文件处理命令 1.linux命令格式 简化选项用-表示,完整选项用--表示 注:linux通过权限位第1位(-:文件 / d:目录 / l:链接文件 来区分文件类型) 2.linux ...

  6. 20191128 Spring Boot官方文档学习(9.9)

    9.9.数据存取 Spring Boot包含许多用于处理数据源的启动器. 9.9.1.配置自定义数据源 要配置自己的DataSource,请在配置中定义该类型的@Bean.Spring Boot可以在 ...

  7. Canvas入门06-线段与像素边界

    我们知道,使用以下2个API可以绘制一条线段: moveTo(x, y) 向当前路径中增加一条子路径,该子路径只包含一个点,此为线段的起始点 lineTo(x, y) 将线段的下一个点加入子路径中 c ...

  8. CentOS7linux通过http配置共享自动创建yum源的shell脚本

    因工作需要用到,所以记录一下配置流程 环境介绍: 两台CentOS7系统 yum源服务主节点IP:192.168.1.78 从节点IP:192.168.1.79(79从78上获取yum源) 配置78节 ...

  9. 打印页面内容,<input>不好使,用<textarea> 代替

    <textarea class="sld-textarea" onchange="changeTextareaValue(this)">123< ...

  10. html5酷炫效果链接收集

    HTML5 3D图片相册图片轮播动画   http://www.html5tricks.com/demo/html5-3d-gallery-animation/index.html 36种漂亮的CSS ...