DOM事件和一些实用笔记
let el = document.body.querySelector("style[type='text/css'], style:not([type])");
返回HTML文档里第一个没有type属性或者有值为“text/css”的type属性的<style>元素
document.querySelector只返回第一个符合的对象。
**事件对象**
有时候在事件处理函数内部,您可能会看到一个固定指定名称的参数,例如event,evt或简单的e。 
这被称为事件对象,它被自动传递给事件处理函数,以提供额外的功能和信息。 
例如,让我们稍稍重写一遍我们的随机颜色示例:
function bgChange(e) {
  var rndCol = 'rgb(' + random(255) + ',' + random(255) + ',' + random(255) + ')';
  e.target.style.backgroundColor = rndCol;
  console.log(e);
}  
btn.addEventListener('click', bgChange);
在这里,您可以看到我们在函数中包括一个事件对象e,并在函数中设置背景颜色样式在e.target上 - 它指的是按钮本身。 
事件对象 e 的target属性始终是事件刚刚发生的元素的引用。 
所以在这个例子中,我们在按钮上设置一个随机的背景颜色,而不是页面。
**捕获和冒泡**
假如我们点击一个div, 实际上是先点击document,然后点击事件传递到div,而且并不会在这个div就停下,
div有子元素就还会向下传递,最后又会冒泡传递回document
btn2.addEventListener('click',handlers,false);这里的false表示只在冒泡阶段添加事件
btn2.removeEventListener('click',handlers.false);这里的false表示只在冒泡阶段添加事件
stopPropagation()方法可以阻止事件冒泡(IE中为cancleBubble=true)一般用在事件后面的方法体内。
IE事件处理程序(IE和Opera支持)
IE用了attachEvent(),detachEvent(),接收两个参数,事件名称和事件处理程序,
通过attachEvent()添加的事件处理程序都会被添加到冒泡阶段,
所以平时为了兼容更多的浏览器最好将事件添加到事件冒泡阶段,
IE8及以前只支持事件冒泡;
btn3.attachEvent('onclick',handlers2);
**事件委托**
这里用父级ul做事件处理,当li被点击时,由于冒泡原理,事件就会冒泡到ul上,
因为ul上有点击事件,所以事件就会触发,当然,这里当点击ul的时候,也是会触发的,
那么问题就来了,如果我想让事件代理的效果跟直接给节点的事件效果一样怎么办,
比如说只有点击li才会触发,不怕,我们有绝招:
Event对象提供了一个属性叫target,可以返回事件的目标节点,我们成为事件源,
也就是说,target就可以表示为当前的事件操作的dom,但是不是真正操作dom,
当然,这个是有兼容性的,标准浏览器用ev.target,IE浏览器用event.srcElement,
此时只是获取了当前节点的位置,并不知道是什么节点名称,这里我们用nodeName来获取具体是什么标签名,
这个返回的是一个大写的,我们需要转成小写再做比较(习惯问题):
window.onload = function(){
  var oUl = document.getElementById("ul1");
  oUl.onclick = function(ev){
    var ev = ev || window.event;
    var target = ev.target || ev.srcElement;
    if(target.nodeName.toLowerCase() == 'li'){
        	alert(123);
         alert(target.innerHTML);
    }
  }
}
那什么样的事件可以用事件委托,什么样的事件不可以用呢?
适合用事件委托的事件:click,mousedown,mouseup,keydown,keyup,keypress。
值得注意的是,mouseover和mouseout虽然也有事件冒泡,但是处理它们的时候需要特别的注意,
因为需要经常计算它们的位置,处理起来不太容易。
不适合的就有很多了,举个例子,mousemove,每次都要计算它的位置,非常不好把控,
说focus,blur之类的,本身就没用冒泡的特性,自然就不能用事件委托了。
**Text 对象**
属性	描述
accessKey	设置或返回访问文本域的快捷键。
alt	设置或返回当浏览器不支持文本域时供显示的替代文本。
defaultValue	设置或返回文本域的默认值。
disabled	设置或返回文本域是否应被禁用。
form	返回一个对包含文本域的表单对象的引用。
id	设置或返回文本域的 id。
maxLength	设置或返回文本域中的最大字符数。
name	设置或返回文本域的名称。
readOnly	设置或返回文本域是否应是只读的。
size	设置或返回文本域的尺寸。
tabIndex	设置或返回文本域的 tab 键控制次序。
type	返回文本域的表单元素类型。
value	设置或返回文本域的 value 属性的值。
className	设置或返回元素的 class 属性。
dir	设置或返回文本的方向。
lang	设置或返回元素的语言代码。
title	设置或返回元素的 title 属性。
方法	描述
blur()	从文本域上移开焦点。
focus()	在文本域上设置焦点。
select()	选取文本域中的内容。
**Button 对象**
在 HTML 文档中 <button> 标签每出现一次,Button 对象就会被创建。
属性	描述
accessKey	设置或返回访问某个按钮的快捷键。
disabled	设置或返回是否禁用按钮。
form	返回对包含按钮的表单的引用。
id	设置或返回按钮的 id。
name	设置或返回按钮的名称。
tabIndex	设置或返回按钮的 Tab 键控制次序。
type	返回按钮的表单类型。
value	设置或返回显示在按钮上的文本。
className	设置或返回元素的 class 属性。
dir	设置或返回文本的方向。
lang	设置或返回元素的语言代码。
title	设置或返回元素的 title 属性。
window.onkeypress, window.onkeydown, window.onkeyup — 当按钮被按下时颜色会发生改变. 
keypress 指的是通俗意义上的按下按钮 (按下并松开), 而 keydown 和 keyup 指的是按键动作的一部分,分别指按下和松开. 
注意如果你将事件处理器添加到按钮本身,它将不会工作 — 我们只能将它添加到代表整个浏览器窗口的 window对象中。
**HTML DOM clip 属性**
Object.style.clip=rect(top,right,bottom,left)
把一个元素上下左右分别裁剪相应的像素。
注释:该属性不能用于 "overflow" 设置为 "visible" 的元素。
**javascript 动态修改css样式的四种方法**
1、使用obj.className来修改样式表的类名。
2、使用obj.style.cssTest来修改嵌入式的css。
3、使用obj.setAttribute("class", "style2")方法来修改样式表的类名。
4、使用更改外联的css文件,从而改变元素的css
<link href="css1.css" rel="stylesheet" type="text/css" id="css"/>
document.getElementById("css").setAttribute("href","css2.css");
**async 和 defer**
使用 async 属性可以异步加载脚本,从而不会影响HTML文件,例如:
你的页面要加载以下三个脚本:
<script async src="js/vendor/jquery.js"></script>
<script async src="js/script2.js"></script>
<script async src="js/script3.js"></script>
三者的调用顺序是不确定的。jquery.js 可能在 script2 和 script3 之前或之后调用,
如果这样,后两个脚本中依赖 jquery 的函数将产生错误,因为脚本运行时 jquery 尚未加载。
解决这一问题可使用 defer 属性,脚本将按照在页面中出现的顺序加载和运行:
<script defer src="js/vendor/jquery.js"></script>
<script defer src="js/script2.js"></script>
<script defer src="js/script3.js"></script>
并将关联的脚本按所需顺序置于 HTML 中,以免影响HTML文件。
**property 和 attribute**
property 是DOM节点的属性,是JavaScript里的对象;
attribute 是HTML标签上的特性,表现为DOM节点的attributes属性,它的值只能够是字符串;
attribute 和 property之间的数据绑定是单向的,修改 attribute 会导致 property发生修改;
更改property和attribute上的任意值,都会将更新反映到HTML页面中。
DOM事件和一些实用笔记的更多相关文章
- Javascript高级编程学习笔记(71)—— 模拟事件(1)DOM事件模拟
		
事件,指的是网页中某个特定的交互时刻 一般来说事件由浏览器厂商负责提供,一般由用户操作或者其它浏览器功能来触发 但是有一类特殊的事件,那就是由我们开发人员通过JS触发的事件 这些事件和浏览器创建的事件 ...
 - JS学习笔记(一)DOM事件和监听
		
将事件绑定到元素身上的三种方法: 1.HTML事件处理程序(不推荐使用) 1 <a onclick="hide()"> 2.传统的DOM事件处理程序 即在目标DOM事件 ...
 - 最全的DOM事件笔记
		
1. DOM事件模型 DOM是微软和网景发生"浏览器大战"时期留下的产物,后来被"W3C"进行标准化,标准化一代代升级与改进,目前已经推行至第四代,即 leve ...
 - DOM事件
		
在慕课网上学习了DOM事件探秘课程,特此整理了一下笔记. 慕课网DOM事件探秘课程地址:http://www.imooc.com/learn/138 事件 是文档或浏览器窗口中发生的特定的交互瞬间.[ ...
 - 【前端盲点】DOM事件流论证CSS盒模型是否具有厚度
		
前言 很久没有扯淡了,我们今天来扯淡吧. 我今天思考了一个问题,我们页面的dom树到底是如何渲染的,而CSS盒模型与javascript是否有联系,于是便想到一个问题: CSS的盒模型具有厚度么??? ...
 - 系统学习DOM事件机制
		
本文将从以下几个方面介绍DOM事件: 基本概念:DOM事件的级别 DOM事件模型,事件流 描述DOM事件捕获的具体流程 Event对象的常见应用 自定义事件 DOM事件的级别 //DOM0 eleme ...
 - jQuery操作dom事件
		
参考:jQuery权威指南jQuery初步jQuery选择器jQuery操作domjQuery操作dom事件jQuery插件jQuery操作AjaxjQuery动画与特效jQuery实现导航栏jQue ...
 - DOM 事件深入浅出(二)
		
在DOM事件深入浅出(一)中,我主要给大家讲解了不同DOM级别下的事件处理程序,同时介绍了事件冒泡和捕获的触发原理和方法.本文将继续介绍DOM事件中的知识点,主要侧重于DOM事件中Event对象的属性 ...
 - DOM 事件深入浅出(一)
		
在项目开发时,我们时常需要考虑用户在使用产品时产生的各种各样的交互事件,比如鼠标点击事件.敲击键盘事件等.这样的事件行为都是前端DOM事件的组成部分,不同的DOM事件会有不同的触发条件和触发效果.本文 ...
 
随机推荐
- 基于 DataLakeAnalytics 的数据湖实践
			
随着软硬件各方面条件的成熟,数据湖(Data Lake)已经越来越受到各大企业的青睐, 与传统的数仓实践不一样的是,数据湖不需要专门的“入仓”的过程,数据在哪里,我们就从哪里读取数据进行分析.这样的好 ...
 - ML面试1000题系列(71-80)
			
本文总结ML面试常见的问题集 转载来源:https://blog.csdn.net/v_july_v/article/details/78121924 71.看你是搞视觉的,熟悉哪些CV框架,顺带聊聊 ...
 - 全球城市群Megalopolis
			
Megalopolis From Wikipedia, the free encyclopedia (Redirected from Megalopolis (city type)) &quo ...
 - vue轮播图插件之vue-awesome-swiper
			
移动端轮播图插件,在使用iview图形界面插件中的carousel组件无法实现触摸滑动后,转而使用vue-awesome-swiper插件 1.npm安装 npm i vue-awesome-swip ...
 - [Vue CLI 3] 配置解析之 parallel
			
官方文档中介绍过在 vue.config.js 文件中可以配置 parallel,作用如下: 是否为 Babel 或 TypeScript 使用 thread-loader. 该选项在系统的 CPU ...
 - JSP Web第六章整理复习 JavaBean技术
			
P183 什么是JavaBean,JavaBean有哪些特点? javabean是一种特殊的java类 特点:属性private,方法public P184 JavaBean封装数据,例6-1,6-2 ...
 - class介绍
			
ES6引入了Class(类)这个概念,作为对象的模板.通过class关键字,可以定义类.基本上,ES6的class可以看作只是一个语法糖,它的绝大部分功能,ES5都可以做到,新的class写法只是让对 ...
 - jquery.dataTables的探索之路-服务端分页配置
			
最近闲来无事想研究下数据表格,因为之前接触过layui和bootstrap的数据表格,本着能学多少学多少的学习态度,学习下dataTables的服务端分页配置.特与同学们一块分享下从中遇到的问题和解决 ...
 - CSS中的margin和padding的用法和区别
			
在CSS中margin是指从自身边框到另一个容器边框之间的距离,就是容器外距离. 语法结构 (1)padding-left:10px; 左内边距 (2)padding-right:10px; 右内边距 ...
 - 【JZOJ4793】【GDOI2017模拟9.21】妮厨的愤怒
			
题目描述 栋栋和标标都是厨力++的妮厨.俗话说"一机房不容二厨",他们两个都加入了某OI( )交流♂( )群,在钦定老婆的时候出现了偏差,于是闹得不可开交.可是栋栋是群内的长者,斗 ...