DOM

常用的DOM获取方法:

  • node.children 返回子元素节点,没有兼容性问题,动态获取
  • node.parentNode 获取父节点,没有兼容性问题
  • node.offsetParent 获取最近的定位父节点
  • node.tagName 获取元素节点的标签名

常用的DOM操作:

  • document.createElement(“TagName”) 创建一个元素节点

  • parentNode.appendChild(node) 在父节点内容的最后添加子节点

  • parentNode.insertBefore(insertNode,targetNode) 在目标节点前插入一个节点

  • parentNode.replaceChild(replaceNode,targetNode) 用一个节点替换掉目标节点

  • parentNode.removeChild(Node) 删除某个子节点

  • node.cloneNode(Boolean) 接受一个布尔值作为参数,false时为浅克隆,只复制节点本身;true时为深克隆,节点和它的后代节点全部克隆(但是它们自身的事件是不会克隆过来的)

  • document.createDocumentFragment() 文档碎片,作为中间仓库,把要插入所有的节点先存起来,再一次性插入。

innerHTML 和 appendChild() 方法添加子元素节点的区别

  • node.innerHTML()方法是用字符串的形式添加子元素节点,要注意这样做会覆盖原先存在的节点,导致原节点身上的事件无效

  • appendChild()每次调用会让页面重新渲染,所以调用次数过多会使页面性能下降

因此如果操作的节点身上没有事件的话,推荐使用innerHTML方法;若添加的节点身上带有事件而且数量还挺多的话可以使用文档碎片方法

文档节点的相关属性

以下属性都没有单位,默认为px。

  • client:没有兼容性问题,只读属性

    clientWidth / clientHeight

    在元素上使用,获取的是content大小 + padding大小

    document.documentElement(就是html元素) 使用:文档可视区域的大小,不是总大小(不包含滚动条)

    clientTop / clientLeft

    边框的厚度

  • offset: 没有兼容问题

    offsetWidth / offsetHeight

    在元素上使用,获取的是content大小 + padding大小 + 边框大小

    document.documentElement 使用 : 只能获取可视区域的宽度,但是能获取实际高度

    offsetTop / offsetLeft

    获取元素顶部距离定位父级顶部距离的值,但是不包含定位父级的边框厚度

    获取元素左边距离定位父级左边距离的值,但是不包含定位父级的边框厚度

  • scroll:

    scrollWidth / scrollHeight

    在元素上使用,获取的是content大小 + padding大小

    当元素内容超出,宽度 = content大小 + 左padding大小 + 超出部分的大小 = 左padding + 内容宽度

    如果元素内容超出,并且使用overflow:hidden,宽度 = content大小 + padding大小 + 超出部分的大小 = padding + 内容宽度

    scrollTop / scrollLeft IE5不行,可写属性

    document.documentElement.scrollTop / document.body.scrollTop(不同浏览器会兼容其一种写法,最好两种同时写上)

    document.documentElement.scrollLeft / document.body.scrollLeft

    获取滚动轴x轴或者y轴方向的滚动偏移值

  • inner: 不兼容IE8,了解即可

    innerWidth / innerHeight window专属,获取窗口的可视区域宽高(加上滚动条的宽度)

鼠标属性

事件对象e(IE是window.event)下的鼠标属性:

  • client: 没有兼容问题

    clientX / clientY

    鼠标到可视区域的top和left值(鼠标当前点击鼠标的x和y坐标)
  • page: 不兼容IE8及以下 (用client+scroll替代)

    pageX / pageY

    鼠标到文档顶部的left和top值

阻止事件冒泡

事件冒泡:指的是子类触发了某个事件,若子类的父级存在相同的事件类型也会依次全部触发。

阻止冒泡:只是阻止了事件的冒泡,事件源的事件依然会执行。

事件源.事件 = function(e){
e = e || window.event; //兼容ie
if(e.stopPropagation){
e.stopPropagation();
}else{
e.cancelBubble = true; //兼容ie
}
}

DOM2级事件

IE10以上和其他浏览器:

addEventListener(事件名不加on, 事件处理函数, 布尔值)/removeEventListener(事件名不加on, 事件处理函数, 布尔值) 顺序执行,先绑定的先执行

这里布尔值默认为false,表示冒泡。若设置为true则表示捕获,其执行则触发其子元素同类事件执行。

兼容IE10以下:

attachEvent(on+事件名, 事件处理函数)/detachEvent(on+事件名, 事件处理函数) 逆序执行,先绑定的后执行。要特别注意,此时事件处理函数中的this不再指向事件源而是指向window,因此需要用call函数处理。

事件代理(事件委托)

原理是利用事件的冒泡(/捕获)的特性,在子元素触发事件后冒泡被父元素捕捉到,因此在父元素事件对象中的target属性(IE中为e.srcElement)就会指向这个触发事件的子元素。e.currentTarget指向的是添加监听事件的父元素本身。

因此要注意,只有能冒泡的事件才能用事件代理!像onmouseenter和onmouseleave这两个不冒泡的事件是不行的!

阻止默认行为

阻止事件触发时默认会执行的行为。

target.onXXX = function(event){
event = event || window.event;
if(event.preventDefault){
event.preventDefault(); //主流浏览器
}else{
event.returnValue = false; //低版本IE
}
}

滚轮事件

  • 谷歌和IE浏览器

    滚轮事件 mousewheel (未绑定事件时,在谷歌和IE中这个属性为null,在火狐浏览器中为undefined,可以依此做兼容性处理)

    滚动方向步长 event.wheelDelta 上滚+120 下滚-120

  • 火狐独有

    滚轮事件 DOMMouseScroll 只允许DOM2级事件绑定

    滚动方向步长 event.detail 上滚-3 下滚+3

前端知识点回顾——Javascript篇(五)的更多相关文章

  1. 前端知识点回顾——Javascript篇(二)

    JavaScript的解析顺序 第一阶段:编译期 寻找关键字声明的变量.函数声明的变量,同时会对变量进行作用域的绑定 var声明的变量,在编译期会赋一个默认值undefined,变量提升的特性. ES ...

  2. 前端知识点回顾——Javascript篇(六)

    fetch 在原生ajax+es6promise的基础上封装的一个语法糖,返回promise对象. fetch(url, initObj) .then(res=>res.json()) .the ...

  3. 前端知识点回顾——Javascript篇(四)

    Symbol 为什么需要symbol ES5里面对象的属性名都是字符串,如果你需要使用一个别人提供的对象,你对这个对象有哪些属性也不是很清楚,但又想为这个对象新增一些属性,那么你新增的属性名就很可能和 ...

  4. 前端知识点回顾——Javascript篇(三)

    数组的冒泡.选择和插入排序法 冒泡排序法(从小到大) function bubble(arr){ for(let i = 0 ;i<arr.length-1;i++){ for(let j = ...

  5. 前端知识点回顾——Javascript篇(一)

    DOM特殊元素获取 document.documentElement //HTML标签 document.head //head标签 document.title //title标签 document ...

  6. web前端知识点(JavaScript篇)

    call,apply,bind call,apply,bind这三者的区别,及内部实现原理,点这里 promise promise函数的内部实现原理,点这里 闭包 闭包就是能够读取其他函数内部变量的函 ...

  7. 前端知识点回顾——HTML,CSS篇

    前端知识点回顾篇--是我当初刚转行为了面试而将自己学过的前端知识整理成的一份笔记,个人目的性很强,仅供参考. doctype 有什么用 doctype是一种标准通用标记语言的文档类型声明,目的是告诉标 ...

  8. [转] Web前端优化之 Javascript篇

    原文链接: http://lunax.info/archives/3099.html Web 前端优化最佳实践之 JavaScript 篇,这部分有 6 条规则,和 CSS 篇 重复的有几条.前端优化 ...

  9. 前端开发之JavaScript篇

    一.JavaScript介绍  前端三剑客之JavaScript,简称js,可能是这三个里面最难的一个了.很早以前,市面上流通着三种js版本,为了统一,ECMA(欧洲计算机制造协会)定义了规范的版本, ...

随机推荐

  1. Python学习记录2-函数与字符串

    函数 函数是代码的一种组织形式 函数应该能完成一项特定的工作,而且一般一个函数只完成一项工作 有些语言,分函数和过程两个概念,通俗解释是,有返回结果的叫函数,无返回结果的叫过程,python不加以区分 ...

  2. Am335x SD卡刷eMMC二

    犹豫前段时间一直在搞另一个项目,Am335x这个BBlack板就放置一边了.前几天把BBlack板重新拿到手,之前搞得给全忘了.SD卡烧写emmC时突然出现了错误,一直找不到原因,今天终于算是有点眉目 ...

  3. Mysql(八):ORM框架SQLAlchemy

    一 介绍 SQLAlchemy是Python编程语言下的一款ORM框架,该框架建立在数据库API之上,使用关系对象映射进行数据库操作,简言之便是:将对象转换成SQL,然后使用数据API执行SQL并获取 ...

  4. C#DataGrid列值出现E形式的小数,将DataGrid表格上的数据保存至数据库表时会因格式转换不正确导致报错

    问题描述:在DataGridView中调整金额一列,当输入小数0.000001后会显示1E-6,此时进行保存操作时报错,提示无法将string类型转换成Decimal 原因分析:由于列调整金额为1E- ...

  5. git core.autocrlf配置说明

    格式化 格式化是许多开发人员在协作时,特别是在跨平台情况下,遇到的令人头疼的细小问题. 由于编辑器的不同或者Windows程序员在跨平台项目中的文件行尾加入了回车换行符, 一些细微的空格变化会不经意地 ...

  6. OSI七层协议和TCP/IP四层协议

    1. OSI七层和TCP/IP四层的关系 1.1 OSI引入了服务.接口.协议.分层的概念,TCP/IP借鉴了OSI的这些概念建立TCP/IP模型. 1.2 OSI先有模型,后有协议,先有标准,后进行 ...

  7. Redis长短链接的区别

    本文介绍了phpredis中与redis建立连接的两种方式:connect(短连接)和pconnect(长连接)的区别. 问题背景: 项目采用LNMP架构,考虑到数据访问性能问题,因此使用redis来 ...

  8. Tomcat下配置JNDI的三种方式

    最近在整理项目上的配置文件,正好看到了数据源配置,想着配置方式有多种,便趁热打铁,记录下常规的Tomcat配置数据源的方式 1.单个工程配置 找到Tomcat下的server.xml文件,在Conte ...

  9. C# 对象和类型(2) 持续更新

    类 class PhoneClass  { public const string DayOfSendingBill = "Monday"; public int Customer ...

  10. C语言Ⅰ作业-05

    这个作业属于哪个课程 C语言程序设计Ⅰ 这个作业要求在哪里 https://www.cnblogs.com/tongyingjun/p/11722665.html 我在这个课程的目标是 熟练掌握如何用 ...