jQuery原理系列-常用Dom操作详解


Posted in Javascript onJune 07, 2016

1. 事件绑定$(el).bind

ie使用attachEvent,其它浏览器使用addEventListener,不同的是ie多了个on前缀,this绑定在window上,需要用call和apply修正this 的指向。

if (element.addEventListener) {
    element.addEventListener(type, handler, useCapture);
  } else {
    if (element.attachEvent) {
      element.attachEvent("on" + type, function(e){
         handler.call(element,e);
       });
    }
  }

2.获取偏移量 $(el).position();

相对于包含块的偏移量,直接取offsetLeft,offsetTop

{left: el.offsetLeft, top: el.offsetTop}

3.获取相对于根元素的绝对位置$(el).offset()

调用dom元素的getBoundingClientRect方法,这个是鲜为人知的。

var rect = el.getBoundingClientRect();
{
 top: rect.top + document.body.scrollTop,
 left: rect.left + document.body.scrollLeft
}

4.修改css样式 $(el).css({color:"red"})

style属性是无法直接赋值的,但是给style.cssText属性赋值,可以直接赋值到style属性中,为了不覆盖原有的style,我们在原有的cssText后面追加字符

el.style.cssText+="background:red";

5.修改和获取自定义属性$(el).attr(name,val),

dom元素的getAttribute和setAttribute可以修改dom的自定义属性,

el.getAttribute(name)

el.setAttribute(name,val);

另外,jquery还有一个prop方法在设置dom节点的固有属性,例如checkbox,radio的checked属性时,用attr可能设置不成功,这时需要用prop ,prop只能用来读写固有属性,而attr是固有属性和自定义都可以,但是有些特殊的固有属性设置不成功时需要用prop

6.向上查找元素  $(el).parents(selector),$(el).closest(selector)

向上查找元素非常有用,原理是遍历parentNode一直到根节点,判断每一级父节点是否与选择器相匹配,

高级浏览器通过matchesSelector 判断一个dom元素是否匹配某个css 选择器,不同的浏览器有不同的前缀,

var matchesSelector = element.webkitMatchesSelector || element.mozMatchesSelector ||
element.oMatchesSelector || element.matchesSelector

低版本的ie需要自己实现选择器的判断,为了简化问题,仅以id选择器为例,其它选择器雷同(判断tagName,className,getAtrrbuite等)

var el=current,selector="#id1";
while(el.parentNode!=null){
if("#"+el.id==selector){ //el.webkitMatchesSelector(selector)
return el;
}
el=el.parentNode;
}

7.事件委托 $(selector).live("click",callback)

jQuery的live事件绑定机制非常强大,普通的bind只能在dom元素生成后才能绑定事件,而live则可以在任何时候,即使元素还没有生成时就能绑定事件,使用起来相当的多块好省,live的原理自然是通过事件委托(事件代理)实现的,事件委托是指在父元素或根元素上绑定事件,事件委托可以提升性能,只需要一个点击事件绑定就能处理所有元素的点击事件。通过事件冒泡监听,判断当前点击的元素event.target如果是要查找的目标元素,则触发事件回调函数,event.target只有一个,这会带来一个问题,例如一个li元素包含一个a链接,我想在li元素上绑定事件监听a链接的点击,直接通过event.target是不行的,需要查找父级元素,这就需要借助上一步封装的parents或closest查找父级如果是匹配的目标元素,也要触发事件回调,示例代码如下:

function live(selector,callback){
document.body.addEventListener("click",function(e){
var target=e.target || e.srcElement;
var list=closest(target,selector);//向上查找选择器,需要借助上一步封装的closest或parents函数
if(list.length>0){
callback.call(target,e);
}
});

}

8.判断元素可见性 $(el).is(":visible")

这个是jquery特有的伪类:visible,只要当前元素或其父节点不可见,就会返回false,和向上查找元素的原理一样,一直向上查找到根节点,如果有style.display为none的,或style.visiblity为hidden的祖先元素则返回false,否则返回true,获取style不能直接使用style属性,因为有些样式可能是定义在css文件中的,使用window.getComputedStyle(element)可以得到一个dom元素的计算样式,在ie8以下使用currentStyle获取。

以上这篇jQuery原理系列-常用Dom操作详解就是小编分享给大家的全部内容了,希望能给大家一个参考,也希望大家多多支持三水点靠木。

Javascript 相关文章推荐
学习YUI.Ext 第六天--关于树TreePanel(Part 2异步获取节点)
Mar 10 Javascript
在IE下获取object(ActiveX)的Param的代码
Sep 15 Javascript
JavaScript编程开发中的五个实用小技巧
Jul 22 Javascript
js+css使DIV始终居于屏幕中间 左下 左上 右上 右下的代码集合
Mar 10 Javascript
分享14个很酷的jQuery导航菜单插件
Apr 25 Javascript
基于jquery的textarea发布框限制文字字数输入(添加中文识别)
Feb 16 Javascript
JS使用replace()方法和正则表达式进行字符串的搜索与替换实例
Apr 10 Javascript
探讨JavaScript语句的执行过程
Jan 28 Javascript
Vue2 SSR渲染根据不同页面修改 meta
Nov 20 Javascript
WebSocket的简单介绍及应用
May 23 Javascript
vue 关闭浏览器窗口的时候,清空localStorage的数据示例
Nov 06 Javascript
jQuery实现王者荣耀手风琴效果
Jan 17 jQuery
浅析BootStrap栅格系统
Jun 07 #Javascript
浅谈jQuery 选择器和dom操作
Jun 07 #Javascript
BootStrap.css 在手机端滑动时右侧出现空白的原因及解决办法
Jun 07 #Javascript
DOM操作和jQuery实现选项移动操作的简单实例
Jun 07 #Javascript
Knockoutjs 学习系列(二)花式捆绑
Jun 07 #Javascript
Knockoutjs 学习系列(一)ko初体验
Jun 07 #Javascript
【经典源码收藏】jQuery实用代码片段(筛选,搜索,样式,清除默认值,多选等)
Jun 07 #Javascript
You might like
PHP脚本数据库功能详解(中)
2006/10/09 PHP
php 抽象类的简单应用
2011/09/06 PHP
php自定义apk安装包实例
2014/10/20 PHP
php自定义函数实现汉字转换utf8编码的方法
2016/09/29 PHP
laravel 解决Eloquent ORM的save方法无法插入数据的问题
2019/10/21 PHP
PHP实现提取多维数组指定一列的方法总结
2019/12/04 PHP
cloudgamer出品ImageZoom 图片放大效果
2010/04/01 Javascript
jQuery 过滤not()与filter()实例代码
2012/05/10 Javascript
javascript数组去重方法终极总结
2014/06/05 Javascript
js实现两点之间画线的方法
2015/05/12 Javascript
jquery实现简单文字提示效果
2015/12/02 Javascript
初识angular框架后的所思所想
2016/02/19 Javascript
利用Vue.js指令实现全选功能
2016/09/08 Javascript
vue.js国际化 vue-i18n插件的使用详解
2017/07/07 Javascript
Bootstrap 实现表格样式、表单布局的实例代码
2018/12/09 Javascript
jquery 键盘事件 keypress() keydown() keyup()用法总结
2019/10/23 jQuery
vue实现设置载入动画和初始化页面动画效果
2019/10/28 Javascript
Vuex实现数据增加和删除功能
2019/11/11 Javascript
JavaScript实现放大镜效果代码示例
2020/04/29 Javascript
微信小程序实现点击导航条切换页面
2020/11/19 Javascript
Python3中多线程编程的队列运作示例
2015/04/16 Python
python删除过期文件的方法
2015/05/29 Python
Python for Informatics 第11章之正则表达式(四)
2016/04/21 Python
在django中实现页面倒数几秒后自动跳转的例子
2019/08/16 Python
python各层级目录下import方法代码实例
2020/01/20 Python
MATLAB数学建模之画图汇总
2020/07/16 Python
Python爬虫实战案例之爬取喜马拉雅音频数据详解
2020/12/07 Python
Python 生成短8位唯一id实战教程
2021/01/13 Python
纯CSS3实现的井字棋游戏
2020/11/25 HTML / CSS
电话销售经理岗位职责
2013/12/07 职场文书
给导游的表扬信
2014/01/10 职场文书
大一学生的职业生涯规划书范文
2014/01/19 职场文书
终止合同协议书
2014/04/17 职场文书
教师演讲稿大全
2014/05/16 职场文书
行政处罚告知书
2015/07/01 职场文书
建房合同协议书
2016/03/21 职场文书