位置: 编程技术 - 正文

Jquery-1.9.1源码分析系列(十一)之DOM操作(jquery源码分析笔记)

编辑:rootadmin

推荐整理分享Jquery-1.9.1源码分析系列(十一)之DOM操作(jquery源码分析笔记),希望有所帮助,仅作参考,欢迎阅读内容。

文章相关热门搜索词:jquery原理解析,jquery源码分析,jquery.min.js源代码,jquery源码是什么水平,jquery源码是什么水平,jquery.min.js源代码,jquery源码是什么水平,jquery源码实现原理,内容如对您有帮助,希望把文章链接给更多的朋友!

DOM操作包括append、prepend、before、after、replaceWith、appendTo、prependTo、insertBefore、insertAfter、replaceAll。其核心处理函数是domManip。

  DOM操作函数中后五种方法使用的依然是前面五种方法,源码

  浏览器原生的插入节点的方法有两个:appendChild和inserBefore,jQuery利用这两个方法拓展了如下方法

  jQuery.fn.append使用this.appendChild( elem )

  jQuery.fn.prepend使用this.insertBefore( elem, this.firstChild )

  jQuery.fn.before使用this.parentNode.insertBefore( elem, this );

  jQuery.fn.after使用this.parentNode.insertBefore( elem, this.nextSibling );

  jQuery.fn.replaceWith 使用this.parentNode.insertBefore( elem, this.nextSibling);

  看一个例子的源码(jQuery.fn.append)

  根据上面的源码。猜测domManip的作用是遍历当前jQuery对象所匹配的元素,然后每个元素调用传入的回调,并将要插入的节点(如果是字符串那么需要创建文档碎片节点)作为传入的回调的参数;并执行传入的回调。

  接下来分析domManip,看猜测是否正确。dom即Dom元素,Manip是Manipulate的缩写,连在一起的字面意思就是就是Dom操作。

a. domManip: function( args, table, callback )解析

  args 待插入的DOM元素或HTML代码

  table 是否需要修正tbody,这个变量是优化的结果

  callback 回调函数,执行格式为callback.call( 目标元素即上下文, 待插入文档碎片/单个DOM元素 )

  先看流程,再看细节

  第一步,变量初始化。其中iNoClone在后面会用到,如果当前的jQuery对象所匹配的元素不止一个(n > 1)的话,意味着构建出来的文档碎片需要被n用到,则需要被克隆(n-1)次,加上碎片文档本身才够n次使用;value 是第一个参数args的第一个元素,后面会对value是函数做特殊处理;

  第二步,处理特殊下要将当前jQuery对象所匹配的元素一一调用domManip。这种特殊情况有两种:第一种,如果传入的节点是函数(即value是函数)则需要当前jQuery对象所匹配的每个元素都将函数计算出的值作为节点代入domManip中处理。第二种,webkit下,我们不能克隆文含有checked的文档碎片;克隆的文档不能重复使用,那么只能是当前jQuery对象所匹配的每个元素都调用一次domManip处理。

  第三步,处理正常情况,使用传入的节点构建文档碎片,并插入文档中。这里面构建的文档碎片就需要重复使用,区别于第二步的处理。这里面需要注意的是如果是script节点需要在加载完成后执行。顺着源码顺序看一下过程

  构建文档碎片

  分离出其中的script,这其中有一个函数disableScript更改了script标签的type值以确保安全,原来的type值是"text/javascript",改成了"true/text/javascript"或"false/text/javascript"

  文档碎片插入页面

  执行script,分两种情况,远程的使用ajax来处理,本地的直接执行。

b. dom操作拓展

jQuery.fn.text

  最终执行value === undefined &#; jQuery.text( this ) : this.empty().append( ( this[0] && this[0].ownerDocument || document ).createTextNode( value ) );

  其中jQuery.text = Sizzle.getText;

jQuery.fn.html

Jquery-1.9.1源码分析系列(十一)之DOM操作(jquery源码分析笔记)

  函数使用jQuery.access来处理

  如果没有参数表示是取值

  否则看是否能用innerHTML添加内容。点击参考兼容问题

  如果不能使用innerHTML或使用不成功(抛出异常),则使用备用方法append

  用包裹裹住当前jQuery对象

  注意:当前jQuery对象匹配的元素最好只有一个,如果有多个的话不推荐使用,这种情况慎用,后面举例可以看到。

  简单的例子,原DOM为(后面都使用这个例子)

  慎用:如果当前jQuery所匹配的元素不止一个,例如原DOM执行$('div').wrapAll(“<p></p>”)后结果DOM变成

  看到结果了吧,本来#center是#ss的父节点,结果变成了#ss的兄弟节点。

jQuery.fn.wrapInner(在每个匹配元素的所有子节点外部包裹指定的HTML结构)

  处理步骤:

  传入参数是函数则将函数结果传入

  遍历jQuery对象数组,获取每个元素包含的内容(所有子节点)contents,然后使用warpAll包裹住contents

  还是使用上面的例子中的原DOM,执行$('div').wrapInner('<p></p>')后结果DOM变成

jQuery.fn.wrap(在每个匹配元素外部包裹指定的HTML结构)

  对jQuery的每个元素分别使用wrapAll包裹一下

行$('div').wrap('<p></p>')后结果DOM变成

jQuery.fn.unwrap(移除每个匹配元素的父元素)

  使用replaceWith用匹配元素父节点的所有子节点替换匹配元素的父节点。当然了父节点是body/html/document肯定是移除不了的

  

jQuery.fn.remove(从文档中移除匹配的元素)

  你还可以使用选择器进一步缩小移除的范围,只移除当前匹配元素中符合指定选择器的部分元素。

  与detach()相比,remove()函数会同时移除与元素关联绑定的附加数据( data()函数 )和事件处理器等(detach()会保留)。

  可以看到其中有一个重要的函数cleanData,该方法是用来清除缓存:遍历每一个节点元素,对每一个节点元素做一下处理:

1.获取当前元素对应的缓存

2.如果有绑定事件,则遍历解绑事件

3.如果jQuery.event.remove没有移除cache,则手动移除cache。其中IE需要做一些兼容处理,而且最终会将删除历史保存如core_deletedIds中

jQuery.fn.detach

jQuery.fn.empty(清空每个匹配元素内的所有内容(所有子节点))

  函数将会移除每个匹配元素的所有子节点(包括文本节点、注释节点等所有类型的节点),会清空相应的缓存数据。

基于jquery实现页面滚动时顶部导航显示隐藏 本文实例讲述了jquery实现页面滚动时顶部导航显示隐藏效果代码。分享给大家供大家参考。具体如下:运行效果截图如下:具体代码如下:引入核心文

基于jQuery实现拖拽图标到回收站并删除功能 本文利用jQuery实现一个拖拽删除桌面小图标的功能,使用起来就像操作系统的回收站一样,我们只需要拖动应用图标至垃圾箱即可删除这个图标,分享

jquery+css实现动感的图片切换效果 本文实例讲述了jquery+css实现动感的图片切换效果代码。分享给大家供大家参考。具体如下:运行效果截图如下:具体代码如下:基本思路:定义一个数

标签: jquery源码分析笔记

本文链接地址:https://www.jiuchutong.com/biancheng/373833.html 转载请保留说明!

上一篇:jQuery实现宽屏图片轮播实例教程(jqgrid设置宽度)

下一篇:基于jquery实现页面滚动时顶部导航显示隐藏(jquery页面跳转的方法)

  • 零售价是含税价还是不含税价
  • 个人向公司提供劳务,开发票
  • 纳税调整增加额在报表的哪里
  • 税务局代个人开发票
  • 外贸企业进项税额
  • 发票盖了财务专用章旁边再盖发票章
  • 财务章备案和不备份区别
  • 研发费用属于哪个费用
  • 目前哪些费用不能加计扣除
  • 预缴企业所得税怎么做会计分录
  • 从租计征的房产税纳税期限
  • 现金清查时,发现长款200元,未查明原因,经批准后转销
  • 自然人独资企业是什么意思
  • 个人投资者取得现金红利的过程不用支付利息税
  • 金融机构利息收入缴纳增值税
  • 建筑公司收到劳务费
  • 证券公司转让价格
  • 漏提折旧可以所得税扣除吗
  • 境外派遣员工境外所得税是什么时候申报?
  • 2019年煤炭
  • 企业合同约定调岗不接受辞退没赔偿成立吗
  • 年终奖的税收筹措是什么
  • 其他收益等于什么
  • 借款本金和借款余额
  • 公司开一般户弊端
  • 分支机构注销留抵税额可以税前扣除吗?
  • 销项税和进项税怎么区分
  • 中小企业的界定标准是什么
  • 收到招标公司开的发票
  • 电子承兑到期怎样接收
  • 去实体店装win10专业版多少钱
  • 期初银行余额有误怎么调分录怎么写
  • 同一张发票可以分两次报销吗
  • window10自带商店下载位置
  • php preg_quote
  • php unit
  • Mac怎么更改默认打开方式
  • 产品设计费增值税怎么算
  • excel多表操作法
  • 公司以知识产权出资纳税筹划
  • 出口货物视同内销征税的会计核算
  • php自定义字段
  • 税务函调异常怎么处理
  • 计算机视角技术
  • 企业注销后还有风险吗
  • 理财产品的分红和收益是分开的吗
  • 售价金额核算法的优点有
  • 非税收入票据可以跨年度使用吗
  • 出票后定期付款的汇票,其提示付款的期限为
  • 商业一般纳税人辅导期截止时间
  • 非正常损失的进项税额可以转出吗
  • 固定资产清理属于什么科目借方增加还是减少
  • 怎么做好流水账
  • 公司主要产品
  • 个体工商户可以变更法人吗
  • 百旺金赋开票系统图标
  • 残保金零申报必须大于0
  • 投出业务会计分录
  • mysql创建用户密码命令
  • win10预览版21277
  • Windows Server 2003系统进程中NETWORK SERVICE相关知识详解
  • win8.1怎么升级到win11
  • 苹果电脑mac怎么卸载软件
  • Linux系统网络配置
  • windows8开机慢怎么办
  • ubuntu中装虚拟机
  • hpm是什么格式的文件
  • linux deploy 无root
  • win8系统如何关闭杀毒系统
  • windows7看视频黑屏
  • unity 插件开发
  • 在生成目录之前必须对相关文字设置样式
  • 网页设计div css布局
  • js如何封装
  • js如何实现类的继承
  • 郑州市高新区税务局地址
  • 个人转让商业用房税费
  • 丰台和朝阳中间是哪里
  • 留抵税额退税政策2022年14号文件
  • 浙江省电子税务局电话
  • 免责声明:网站部分图片文字素材来源于网络,如有侵权,请及时告知,我们会第一时间删除,谢谢! 邮箱:opceo@qq.com

    鄂ICP备2023003026号

    网站地图: 企业信息 工商信息 财税知识 网络常识 编程技术

    友情链接: 武汉网站建设