前端的一些常用DOM和事件归纳
1、document.getElementById(id); document.getElementByTagName(tagName);
document.getElementsByName(name);在IE8以下不兼容获取不到div、span、非name标准元素属性,建议不用
document.getElementsByClassName(className) 在IE8以下不兼容;
2、element.parentNode --element.nextSibling--element.previousSibling;
3、element.childNodes ;
3、element.children;
4、document.createElement()方法创建元素节点;
5、document.createTextNode()方法创建文本节点;
6、parentElement.appendChild(newChild)添加节点;
7、parentNode.insertBefore(newNode,otherChlidNode)方法插入子节点;
8、parentNode.replaceChild(newNode,oldNode)替换子节点;
9、cloneNode(bool)方法复制节点,bool==true的话包括属性样式子节点全部复制;
10、parentNode.removeChild(childNode)删除子节点; parentNode.childNodes[]ff和ie会把空格算进去;
11、element.firstChild 等价 element.children[0];
12、element.lastChild 等价 element.children[element.children.length-1];
13、nodeName属性获得节点名称;
14、 nodeType返回节点的类型:元素节点返回1 、属性节点返回2 、文本节点返回3 ;
15、nodeValue返回节点的值:元素节点返回null 、属性节点返回undefined 、文本节点返回文本内容 ;
16、hasChildNodes()判断是否有子节点;
17、tagName属性返回元素的标记名称 ;这个属性只有元素节点才有,等价于nodeName属性;
18、setAttribute("属性名","值");
19、getAttribute()方法获得属性值 ;
i20、nnerHTML和innerText属性,ie还是ff会把空格、换行、制表符等当成文本节点; 通过判断遍历用nodeType来获取类型用正则/\s/匹配,21、去掉空格parentNode.removeChild(node);
22、表格: table.insertRow(i)插入行; i-行的位置
row.insertCell(i)插入单元格;
table.rows.cells单元格操作;
table.deleteRow(index); 删除行
row.deleteCell(index); 删除单元格
23、Event对象创建判断,IE、chrome为window.event,FF中需要把事件对象通过形参传入到函数中;
ie中阻止默认事件:returnValue = false;阻止冒泡:event.cancelBubble = true;
FF中 阻止默认事件:oEvent.preventDefault(); 阻止冒泡:oEvent.stopPropagation();
在DOM二级标准中,为某个元素注册事件处理函数用addEventListener(),移除用removeEventListener(),这两个方法都有三个参数,第一 个是事件名称,第二个是处理函数(句柄),第三个是一个布尔值,true表示指定的事件处理函数在捕获阶段执行,false表示在冒泡阶段执行.
obj.addEventListener(sEventName,fn,bool);移除事件:removeEventListener(sEventName,fn,bool);
在IE中,没有事件捕获阶段,只支持冒泡;注册事件处理函数用attachEvent(),移除用detachEvent(),它们有两个参数:事件名和处理函数(句柄) obj.attachEvent ("on"+ sEventName, fn); obj.detachEvent ("on"+ sEventName, fn)或者sEventName.replace(/^on/i, '');正则替换掉;
一般处理兼容为了防止冒泡和默认事件采用匿名函数里判断调用函数是否return false:
function(fn){obj.addEventListener(sEventName,function(){if(false==fn.call(obj,ev){ev.cancelBubble=true;ev.preventDefault();}},bool);}
function(fn){obj.attachEvent(on+ sEventName,function(){if(false==fn.call(obj,ev){ev.cancelBubble=true;return false;}}; }
在IE中绑定同一个事件,会先执行后绑定的事件,这一点要特别注意;
在IE中event对象有srcElement(获取事件对象的DOM元素)属性,但是没有target属性;FF下,even对象有target属性,但是没有srcElement属性.
事件的属性:X-top(left)
type-事件类型;
shiftKey,ctrlKey,altKey,metaKey(DOM):是否按下了Shift,Ctrl,Alt,Meta键;按下时,值为 TRUE ,否则为 FALSE ,只读。
键盘事件:
keydown:按下键盘任意键触发,按住不放会重复触发;
keypress:按下键盘任意字符键时触发,按住不放会重复触发 ;
keyup:释放键盘上的按键时触发;
当按一下键盘上字符键时,会依次触发kedown、keypress、keyup
鼠标:button:0-未按下键;1-按左键;2-按右键;右击事件oncontextmenu;
keyCode(IE中),e.which(OP),charCode(DOM):键对应的代码; 其中截屏键是没有代码的
screenX:IE和FF下通用,表示相对于屏幕的坐标;
clientX:IE和FF下通用,表示相对于页面可视区域坐标;
pageX:FF特有,表示相对于网页页面的坐标,它与clientX的区别在于它加上了滚动条的偏移量。
layerX:FF特有,表示鼠标相对于触发事件的元素的(包括padding但不包括border)开始的坐标,不管元素是否定义了position;
offsetX:IE特有,表示鼠标相对于触发事件的元素的 (包括padding但不包括border)开始的坐标,不管元素是否定义了position;相当于FF下的layerX;
x:IE特有,与clientX作用相同。
offsetLeft(top):该DOM对象的层级关系中离该对象最近的、设置了position的父对象(一直向上级找)”中的位置,该对象可以用offsetParent属性得到,如找不到设置了position的父对象则以body为参照,ie6下以HTML为参照。其值为offsetLeft=marginLeft+Left。
offsetWidth(height)=padding+width(height)+border+scrollbar;
clientWidth=padding+width;
scrollWidth:当内容宽小于对象宽时,scrollWidth=clientWidth;当内容宽大于对象宽时,此时设置对象的overflow:hidden,则scrollWidth的值为内容的实际宽,如果对象设置的padding,则FF下scrollWidth=内容宽+padding值,而IE6下scrollWidth=内容宽+padding值*2,所以建议不设padding。
若对象未设置width属性,则scrollWidth即为其内容的宽度。
scrollLeft:内容偏移对象左边的距离。可以总结出:scrollLeft的最大值=scrollWidth-clientWidth。
document.documentElement.clientHeight(width);
document.documentElement.scrollTop和document.body.scrollTop,这二者的区别主要在于documentType的申请,简单的说是在带<!DOCTYPE ..>标签的页面里document.body.scrollTop的结果是0,而在没有申请<!DOCTYPE ..> 的页面里document.documentElement.scrollTop为0。
24、aJax对象:
DOM中IE7以上创建:new XMLHttpRequest();
IE6中创建:new ActiveXobject("microsoft.XMLHTTP") ;
oAjax.open(method, url, true);第一个参数:发送方式post/get,post无法使用缓存文件,第二个参数:url地址,第三个参数true-异步false-同步
oAjax.send(str);str参数仅用于 POST 请求
如果需要像 HTML 表单那样 POST 数据,请使用 setRequestHeader() 来添加 HTTP 头,然后在 send() 方法中规定您希望发送的数据:
oAjax.setRequestHeader("Content-type","application/x-www-form-urlencoded"); oAjax.send("fname=xiao&lname=tang");
oAjax.onreadystatechange抓取数据动态,
readyState属性值:0: 请求未初始1: 服务器连接已建2: 请求已接3: 请求处理4: 请求已完成,且响应已就绪 ;
status属性值:404: 未找到页面,200 完成;
oAjax.readyState==4 && oAjax.status==200 获取成功调用函数,把返回的字符串或xml对象数据作为参数传进函数里:fn(oAjax.responseText/responseXML),responseXML为XML对象需要解析,responseXML.getElementsByTagName("title").children来获取所有DOM标签对象,再用遍历把数据解析出来,若返回的数据是JSON,可以通过eval("(JSON)")直接转为对象,最好用()强制符包裹JSON对象,否则有的浏览器会把JSON当成标签声明来解析,因为浏览器会认为这是个复合语句,在浏览器中,复合语句优先,对象次之。
当请求方式为false同步时,JavaScript 会等到服务器响应就绪才继续执行。如果服务器繁忙或缓慢,应用程序会挂起或停止,不要编写 onreadystatechange 函数 - 把代码放到 send() 语句后面即可 。
oAjax.open("GET","gethint.php?q="+str,true); 通过传递一个变量str从而可以实现onkeyup鼠标抬起事件创建AJAX对象或其它事件实时与后台沟通交互增强用户体验
25、 IE下获取样式:obj.currentStyle[styleName];
FF中:getComputedStyle(obj,false) [styleName];
26、DOM操作中对象的left和right、top与bottom不能同时存在,必须将另一个设为null
前端的一些常用DOM和事件归纳的更多相关文章
- 前端JavaScript(2) --常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍
昨日内容回顾 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 ...
- python 全栈开发,Day51(常用内置对象,函数,伪数组 arguments,关于DOM的事件操作,DOM介绍)
昨日内容回顾 1.三种引入方式 1.行内js <div onclick = 'add(3,4)'></div> //声明一个函数 function add(a,b){ } 2. ...
- 前端 ----关于DOM的事件操作
关于DOM的事件操作 一.JavaScript的组成 JavaScript基础分为三个部分: ECMAScript:JavaScript的语法标准.包括变量.表达式.运算符.函数.if语句.for ...
- 前端(4)BOM与DOM
前端(4)BOM与DOM I/O前戏 到目前为止,我们已经学过了JavaScript的一些简单的语法.但是这些简单的语法,并没有和浏览器有任何交互. 也就是我们还不能制作一些我们经常看到的网页的一些交 ...
- jquery技巧之让任何组件都支持类似DOM的事件管理
本文介绍一个jquery的小技巧,能让任意组件对象都能支持类似DOM的事件管理,也就是说除了派发事件,添加或删除事件监听器,还能支持事件冒泡,阻止事件默认行为等等.在jquery的帮助下,使用这个方法 ...
- JQuery常用实用的事件[较容易忽略的方法]
JQuery常用实用的事件 注:由于JQuery片段较多就没有用插入代码文本插入,请见谅!JQuery 事件处理ready(fn)代码: $(document).ready(function(){ ...
- 两种常用的jquery事件加载的方法 的区别
两种常用的jquery事件加载的方法 $(function(){}); window.onload=function(){} 第一个呢,是在DOM结构渲染完成以后调用的,这时候网页中一些资源还 ...
- 前端性能优化--为什么DOM操作慢? 浅谈DOM的操作以及性能优化问题-重绘重排 为什么要减少DOM操作 为什么要减少操作DOM
前端性能优化--为什么DOM操作慢? 作为一个前端,不能不考虑性能问题.对于大多数前端来说,性能优化的方法可能包括以下这些: 减少HTTP请求(合并css.js,雪碧图/base64图片) 压缩( ...
- JavaScript中,有三种常用的绑定事件的方法
要想让 JavaScript 对用户的操作作出响应,首先要对 DOM 元素绑定事件处理函数.所谓事件处理函数,就是处理用户操作的函数,不同的操作对应不同的名称. 在JavaScript中,有三种常用的 ...
随机推荐
- chrome下float元素下input选中内容bug
今天在写一个小demo的时候,发现chrome下一个很奇怪的bug. 我的代码如下: <!DOCTYPE html> <html lang="en"> &l ...
- Codeforces Round #207 (Div. 1)B(数学)
数学so奇妙.. 这题肯定会有一个循环节 就是最小公倍数 对于公倍数内的相同的数的判断 就要借助最大公约数了 想想可以想明白 #include <iostream> #include< ...
- HDU 1698 Just a Hook (线段树 成段更新 lazy-tag思想)
题目链接 题意: n个挂钩,q次询问,每个挂钩可能的值为1 2 3, 初始值为1,每次询问 把从x到Y区间内的值改变为z.求最后的总的值. 分析:用val记录这一个区间的值,val == -1表示这 ...
- ScaleGestureDetector缩放view
public class ScaleGesture implements OnScaleGestureListener { private float beforeFactor; private fl ...
- 函数fsp_try_extend_data_file
扩展表空间 /***********************************************************************//** Tries to extend t ...
- ASP.NET MVC模型部分验证
在很多情况下,我们为了代码的复用可能会存在ViewModel共用的情形.比方说,web应用中常常会遇到的一个需求就是用户找回密码的功能.用户首先要验证通过验证邮箱(通常是用户名)来获取验证码,然后再进 ...
- 深入学习Oracle分区表及分区索引
关于分区表和分区索引(About Partitioned Tables and Indexes)对于10gR2而言,基本上可以分成几类: • Range(范围)分区 • Has ...
- 自动FTP的小脚本
自动FTP的小脚本 使用以下脚本,可以实现自动FTP,将你需要的文件传送到需要的地方,或者将需要的文件从某个地方抓取下来. cd /PATH_YOU_WANT_TO_UPLOAD(DOWNLOAD) ...
- 如何打开和关闭Oracle Flashback
1.打开flashback: 关闭数据库 SQL>shutdown immediate; 启动到mount方式 SQL>startup mount; 如果归档没有打开,打开归档[因为fla ...
- hdu 2155 小黑的镇魂曲(dp) 2008信息工程学院集训队——选拔赛
感觉蛮坑的一道题. 题意很像一个叫“是男人下100层”的游戏.不过多了个时间限制,要求在限定时间内从某一点下落到地面.还多了个最大下落高度,一次最多下落这么高,要不然会摔死. 一开始想dp的,然后想了 ...