手机版

jQuery3.0中的构建片段私有函数详解

时间:2021-09-07 来源:互联网 编辑:宝哥软件园 浏览:

时隔3个月,jQuery团队终于发布了3.0阿尔法版本。有两个版本jQuery compat 3.0和jQuery 3.0。

jQuery compat 3.0对应之前的1.x,兼容更多的浏览器,对于工业管理学(工业工程)支持到8.0 版本

jQuery 3.0对应之前的2.x,关注更新的浏览器,对于工业管理学(工业工程)支持到9.0 版本

此外, 3.0还增加了对Yandex浏览器的支持,一款来自俄罗斯的浏览器。

下面看下jQuery3.0中的构建片段。

在jQuery3.0中,buildFragment是一个私有函数,用来构建一个包含子节点碎片对象。这个碎片在DOM1中就已经有了,所有浏览器都支持。当频繁操作(添加、插入)DOM时使用该方法可以提高性能约翰瑞西做过一个测试及一篇博客。

jQuery3.0中构建片段只在domManip和jQuery.parseHTML中使用,domManip则被数字正射影像图操作如追加、前置、前置、后置等方法的所依赖。

如下图

构建片段函数有5个参数,源码如下

函数构建片段(元素、上下文、脚本、选择,被忽略){var elem,tmp,tag,wrap,contains,j,fragment=context。createdocumentfragment(),nodes=[],i=0,l=elems . length for(;我。I){ elem=elems[I];如果(elem || elem===0 ) {//直接添加节点(jquery。type(elem)==' object '){//仅支持:安卓=4.0,仅支持PhantomJS 1//push。apply(_,arraylike)在古代WebKitjQuery.merge(nodes,elem.nodeType?[elem]: elem);//将非超文本标记语言转换为文本节点} else if(!rhtml。测试(elem)){节点。push(上下文。createtextnode(elem));//将超文本标记语言转换为数字正射影像图节点} else { tmp=tmp | | fragment。appendchild(上下文。create element(' div ');//反序列化标准表示标记=(rtagName.exec(elem ) || [' ',' '] )[ 1 ].toLowerCase();wrap=wrapMap[标记] || wrapMap ._ defaulttmp。innerhtml=wrap[1]jquery。html前置过滤器(elem)包装[2];//通过包装下降到右边contentj=包装[0];而(j-){ tmp=tmp。LastChild}//Support:仅限安卓=4.0,仅限PhantomJS 1//push . apply(_,arraylike)在古代WebKitjQuery.merge(nodes,tmp.childNodes)上抛出;//记住顶级容器tmp=片段。第一个孩子;//确保创建的节点是孤立的(# 12392)tmp。textcontent=}}}//从fragmentfragment.textContent=' ' '中移除包装;I=0;while((elem=nodes[I]){//跳过已经在上下文集合(trac-4087)中的元素if(选择jquery。inarray(elem,selection ) -1 ) {if(忽略){ ignered。push(elem);}继续;}包含=jquery。包含(elem。ownerdocument,elem);//追加到fragmenttmp=GetAll(片段。appendchild(elem),' script ');//保留脚本评估历史记录if(包含){ SetGlobalEval(tmp);}//如果(脚本){ j=0,则捕获可执行文件;while((elem=tmp[j]){ if(rsscriptype。测试(elem。键入| | ' ')} {脚本。push(elem);} } } }返回片段;}该方法主要执行步骤

通过第二个参数内容创建碎片

通过第一个参数elems构建节点,将elems内元素转成数字正射影像图元素存放于数组节点中

将节点里元素循环放入添加到文档碎片碎片上

返回碎片

重点在第2步,构建节点,有3种情形

elem是数字正射影像图元素(根据节点类型判断),直接放入节点数组中

elem是字符串且不是超文本标记语言标签,创建文本节点对象(文本节点),放入节点数组中

elem是字符串且是超文本标记语言标签,将其转成数字正射影像图元素,放入节点数组中

如图示

后面的两个参数需要注意下

1.最后两个参数选择和忽略只在替换为方法里使用。需要了解的是替换为只做节点替换,不会替换先前元素的所有数据(数据),比如绑定事件,$.数据都不会被新元素拥有。

2.scripts参数只在jQuery.parseHTML方法中使用(false在domManip中传递)。当jQuery.parseHTML的第三个参数keepScripts为false时,节点中的所有scripttags都将被删除。

以上是边肖介绍的jQuery3.0中buildFragment私有函数的详细说明。希望对大家有帮助。如果你有任何问题,请给我留言,边肖会及时回复你。非常感谢您对我们网站的支持!

版权声明:jQuery3.0中的构建片段私有函数详解是由宝哥软件园云端程序自动收集整理而来。如果本文侵犯了你的权益,请联系本站底部QQ或者邮箱删除。