javascript 动态插入技术

作者:司徒正美 来源:Ruby's Louvre 时间:2009-12-14 20:50:00 

最近发现各大类库都能利用div.innerHTML=HTML片断来生成节点元素,再把它们插入到目标元素的各个位置上。这东西实际上就是insertAdjacentHTML,但是IE可恶的innerHTML把这优势变成劣势。首先innerHTML会把里面的某些位置的空白去掉,见下面运行框的结果:

另一个可恶的地方是,在IE中以下元素的innerHTML是只读的:col、 colgroup、frameset、html、 head、style、table、tbody、 tfoot、 thead、title 与 tr。为了收拾它们,Ext特意弄了个insertIntoTable。insertIntoTable就是利用DOM的insertBefore与appendChild来添加,情况基本同jQuery。不过jQuery是完全依赖这两个方法,Ext还使用了insertAdjacentHTML。为了提高效率,所有类库都不约而同地使用了文档碎片。基本流程都是通过div.innerHTML提取出节点,然后转移到文档碎片上,然后用insertBefore与appendChild插入节点。对于火狐,Ext还使用了createContextualFragment解析文本,直接插入其目标位置上。显然,Ext的比jQuery是快许多的。不过jQuery的插入的不单是HTML片断,还有各种节点与jQuery对象。下面重温一下jQuery的工作流程吧。

真是复杂的让人掉眼泪!不过jQuery的实现并不太高明,它把插入的东西统统用clean转换为节点集合,再把它们放到一个文档碎片中,然后用appendChild与insertBefore插入它们。在除了火狐外,其他浏览器都支持insertAdjactentXXX家族的今日,应该好好利用这些原生API。

标签:动态,innerHTML,技术,JavaScript
0
投稿

猜你喜欢

  • asp数组去重复和数组排序

    2008-10-30 12:51:00
  • sqlserver关于分页存储过程的优化【让数据库按我们的意思执行查询计划】

    2011-09-30 11:09:37
  • 玩转MySQL中的外键约束之PHP篇

    2010-03-18 10:20:00
  • 网页设计进阶之六-- 守住那些不能丢的东西

    2008-06-12 13:06:00
  • HTML在线编辑器的原理分析(整理)

    2007-12-22 10:25:00
  • 表单设计中的网页视觉体验

    2008-06-26 13:35:00
  • Window.ShowModalDialog使用手册

    2008-02-24 14:42:00
  • 解析CSS列表样式属性list-style

    2009-03-26 13:16:00
  • 弹性+固宽布局

    2009-05-15 12:19:00
  • MySQL 函数过程递归

    2008-07-25 19:32:00
  • prototype.js1.4版开发者手册

    2007-09-30 14:09:00
  • 天气预报调用代码

    2008-11-18 15:59:00
  • ASP平台如何打造金牌英文网站

    2008-04-10 08:47:00
  • Oracle 子程序参数模式,IN,OUT,NOCOPY

    2009-10-23 18:08:00
  • firefox通过XUL实现text-overflow:ellipsis的效果

    2008-07-08 19:12:00
  • 用ASP生成XBM数字图片验证码

    2008-08-10 18:40:00
  • 按钮表状态还是表动作?

    2009-03-23 18:21:00
  • 10分钟学会Google Map API (二)

    2009-06-07 18:14:00
  • asp如何用HtmlEncode来显示Unicode编码?

    2010-06-12 12:49:00
  • asp实现新评论自动发短信提示的代码

    2011-03-07 10:38:00
  • asp之家 网络编程 m.aspxhome.com