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事件会有不同的触发条件和触发效果.本文 ...
随机推荐
- 基于spring-boot的测试桩设计-添加配置文件(properties)
编写测试时,有些内容可以放到配置文件中. 第一步:新增配置文件 conf.properties 第二步:编写配置文件类 MockConf package mock.mockdemo.conf; imp ...
- npm ci命令比npm installer命令快2至10倍
npm 5.7.1的发布给我们带了一系列新的功能. 其中我最喜欢的就是npm ci命令了. npm ci命令 1.npm ci命令只根据lock-file去下载node_modules. 如果你的pa ...
- Pycharm安装package报错:AttributeError: module 'pip' has no attribute 'main'
Pycharm安装package报错:AttributeError: module 'pip' has no attribute 'main' 确认pip已经升级到目前最新版本了. 在网上搜寻后,解决 ...
- npm run dev 和 npm run serve
1.ERR引发的思考 创建好的 vue 项目直接执行 vue run dev 报错?运行 vue run serve 就可以启动...如下 npm run dev npm ERR! missing s ...
- 【风马一族_SQL Server】
原文来自:http://www.cnblogs.com/sows/p/6097684.html (博客园的)风马一族 侵犯版本,后果自负 2016-11-24 14:25:45 命令行方式处理服务管 ...
- Eclipse Jobs 和后台进程
Eclipse后台进程 1.主线程(Main thread) 一个Eclipse客户端只能跑一个进程,但却可以创建很多线程. 在Eclipse框架中,会用一个单线程去运行所有的代码指令,这个线程执行客 ...
- dialog的进度条
import android.app.Activity; import android.app.ProgressDialog; import android.os.Bundle; import and ...
- Python编码---转自金角大王
本节内容 编码回顾 编码转换 Python的bytes类型 编码回顾 在备编码相关的课件时,在知乎上看到一段关于Python编码的回答 这哥们的这段话说的太对了,搞Python不把编码彻底搞明白,总有 ...
- SDUT-2140_判断给定图是否存在合法拓扑序列
数据结构实验之图论十:判断给定图是否存在合法拓扑序列 Time Limit: 1000 ms Memory Limit: 65536 KiB Problem Description 给定一个有向图,判 ...
- 外贸电子商务网站之Prestashop 语言包安装
prestashop添加语言-下载语言包 我们找到中文简体(Chinese-Simplified)一行,点击最后一栏的下载(Download)按钮,我们点击下载,可以下到一个以语言的 ISO为文件名, ...