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 相关文章推荐
document.onreadystatechange事件的用法分析
Oct 17 Javascript
js之onload事件的一点使用心得
Aug 14 Javascript
利用window.name实现windowStorage代码分享
Jan 02 Javascript
JS文本获得焦点清除文本文字的示例代码
Jan 13 Javascript
jQuery toggleClass应用实例(附效果图)
Apr 06 Javascript
jQuery大于号(>)选择器的作用解释
Jan 13 Javascript
jquery获取form表单input元素值的简单实例
May 30 Javascript
JQuery统计input和textarea文字输入数量(代码分享)
Dec 29 Javascript
jquery ui sortable拖拽后保存位置
Apr 27 jQuery
Node.js中的http请求客户端示例(request client)
May 04 Javascript
微信小程序实现左右联动的实战记录
Jul 05 Javascript
在vue中读取本地Json文件的方法
Sep 06 Javascript
浅析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/12/08 PHP
PHP在获取指定目录下的目录,在获取的目录下面再创建文件,多平台
2011/08/03 PHP
php读取目录及子目录下所有文件名的方法
2014/10/20 PHP
在SAE上搭建最新wordpress的方法
2014/12/21 PHP
php连接oracle数据库及查询数据的方法
2014/12/29 PHP
thinkphp3.2中Lite文件替换框架入口文件或应用入口文件的方法
2015/05/21 PHP
WordPress中给媒体文件添加分类和标签的PHP功能实现
2015/12/31 PHP
php使用fullcalendar日历插件详解
2019/03/06 PHP
input的focus方法使用
2010/03/13 Javascript
JavaScript 继承使用分析
2011/05/12 Javascript
js string 转 int 注意的问题小结
2013/08/15 Javascript
JavaScript遍历table表格中的某行某列并打印其值
2014/07/08 Javascript
JQuery异步加载PartialView的方法
2016/06/07 Javascript
详解js中的apply与call的用法
2016/07/30 Javascript
JS出现失效的情况总结
2017/01/20 Javascript
微信小程序实现留言板功能
2018/11/02 Javascript
vue中node_modules中第三方模块的修改使用详解
2019/05/31 Javascript
javascript中的offsetWidth、clientWidth、innerWidth及相关属性方法
2020/05/14 Javascript
Python版实现微信公众号扫码登陆
2020/05/28 Javascript
使用Taro实现小程序商城的购物车功能模块的实例代码
2020/06/05 Javascript
使用Webpack 搭建 Vue3 开发环境过程详解
2020/07/28 Javascript
[05:59]带你看看DPC的台前幕后
2021/03/11 DOTA
400多行Python代码实现了一个FTP服务器
2012/05/10 Python
requests和lxml实现爬虫的方法
2017/06/11 Python
使用django-guardian实现django-admin的行级权限控制的方法
2018/10/30 Python
PyTorch中常用的激活函数的方法示例
2019/08/20 Python
pyinstaller打包程序exe踩过的坑
2019/11/19 Python
python3爬虫中引用Queue的实例讲解
2020/11/24 Python
html5组织内容_动力节点Java学院整理
2017/07/10 HTML / CSS
利用Storage Event实现页面间通信的示例代码
2018/07/26 HTML / CSS
德国排名第一的主题公园门票网站:Attraction Tickets Direct
2019/09/09 全球购物
个人自荐信
2013/12/05 职场文书
2014全国两会学习心得体会2000字
2014/03/10 职场文书
团委书记的竞聘演讲稿
2014/04/24 职场文书
归元寺导游词
2015/02/06 职场文书
利用Pycharm连接服务器的全过程记录
2021/07/01 Python