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 相关文章推荐
利用location.hash实现跨域iframe自适应
May 04 Javascript
Javascript让DEDECMS告别手写Tag
Sep 01 Javascript
JavaScript实现添加、查找、删除元素
Jul 02 Javascript
jquery实现表单验证简单实例演示
Nov 23 Javascript
JavaScript+CSS实现的可折叠二级菜单实例
Feb 29 Javascript
使用PHP+JavaScript将HTML页面转换为图片的实例分享
Apr 18 Javascript
基于MVC+EasyUI的web开发框架之使用云打印控件C-Lodop打印页面或套打报关运单信息
Aug 29 Javascript
js实现用户输入的小写字母自动转大写字母的方法
Jan 21 Javascript
Centos6.8下Node.js安装教程
May 12 Javascript
Vue.js基础指令实例讲解(各种数据绑定、表单渲染大总结)
Jul 03 Javascript
小程序异步问题之多个网络请求依次执行并依次收集请求结果
May 05 Javascript
vue 动态设置img的src地址无效,npm run build 后找不到文件的解决
Jul 26 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
phpmail类发送邮件函数代码
2012/02/20 PHP
thinkphp模板的包含与渲染实例分析
2014/11/26 PHP
php制作简单模版引擎
2016/04/07 PHP
php封装的page分页类完整实例
2016/10/18 PHP
PHP基于PDO扩展操作mysql数据库示例
2018/12/24 PHP
tp5框架基于Ajax实现列表无刷新排序功能示例
2020/02/10 PHP
THINKPHP5分页数据对象处理过程解析
2020/10/28 PHP
javascript面向对象之Javascript 继承
2010/05/04 Javascript
IE中jquery.form中ajax提交没反应解决方法分享
2012/09/11 Javascript
写JQuery插件的基本知识
2013/11/25 Javascript
动态加载dtree.js树treeview(示例代码)
2013/12/17 Javascript
js css 实现遮罩层覆盖其他页面元素附图
2014/09/22 Javascript
js中unicode转码方法详解
2015/10/09 Javascript
JS生成某个范围的随机数【四种情况详解】
2016/04/20 Javascript
模拟javascript中的sort排序(简单实例)
2016/08/17 Javascript
javascript读取文本节点方法小结
2016/12/15 Javascript
深入理解vue2.0路由如何配置问题
2017/07/18 Javascript
详解Vue结合后台的列表增删改案例
2018/08/21 Javascript
继承行为在 ES5 与 ES6 中的区别详解
2019/12/24 Javascript
Javascript柯里化实现原理及作用解析
2020/10/22 Javascript
在Python中使用dict和set方法的教程
2015/04/27 Python
django请求返回不同的类型图片json,xml,html的实例
2018/05/22 Python
对tf.reduce_sum tensorflow维度上的操作详解
2018/07/26 Python
python处理大日志文件
2019/07/23 Python
JupyterNotebook 输出窗口的显示效果调整实现
2020/09/22 Python
巴西女装购物网站:Eclectic
2018/04/24 全球购物
资产经营总监岗位职责范文
2013/12/01 职场文书
自荐信怎么写呢?
2013/12/09 职场文书
2014庆六一活动方案
2014/03/02 职场文书
《去年的树》教学反思
2014/04/11 职场文书
啦啦队口号大全
2014/06/16 职场文书
社区党员志愿服务活动方案
2014/08/18 职场文书
2014年社区党建工作汇报材料
2014/11/02 职场文书
遗嘱格式范本
2015/08/07 职场文书
2016年学习雷锋精神广播稿
2015/12/17 职场文书
Pytorch 如何实现LSTM时间序列预测
2021/05/17 Python