版权所有,转载请注明来源http://gogo1217.iteye.com,违者必究!
ExtJS4用了一段时间了,最近在做表格的单元格上点击鼠标,动态在下面插入多行数据时,发现IE下不正确。
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> <link rel="stylesheet" type="text/css" href="${pageContext.request.contextPath}/static/ext4/resources/css/ext-all.css" /> <script type="text/javascript" src="${pageContext.request.contextPath}/static/ext4/ext-all.js"></script> <script type="text/javascript"> Ext.Loader.setConfig({ enabled : true, disableCaching : false }); insert = function(tr) { Ext.DomHelper.insertAfter(tr,'<tr><td>第一行插入的数据</td></tr>'+ '<tr><td>第二行插入的数据</td></tr>'+ '<tr><td>第三行插入的数据</td></tr>'); } </script> </head> <body> <table border="1"> <tr> <td><a onclick="insert(this.parentNode.parentNode)">点击我插入一行数据</a></td> </tr> </table> </body> </html>
在IE中点击第一行数据,只会插入第二行数据,而第一行数据会被忽略,第三行以及后续的行数据均被忽略。
跟踪ExtJS的源码,可以看到最终进行DOM操作的代码为Ext.dom.HelperView中的ieTable方法。
ieTable: function(depth, openingTags, htmlContent, closingTags){ detachedDiv.innerHTML = [openingTags, htmlContent, closingTags].join(''); var i = -1, el = detachedDiv, ns; while (++i < depth) { el = el.firstChild; } // If the result is multiple siblings, then encapsulate them into one fragment. ns = el.nextSibling; if (ns) { el = document.createDocumentFragment(); while (ns) { el.appendChild(ns);//此处有问题,没有追加第一个元素,而是直接追加的第二个元素 ns = ns.nextSibling;//此处有问题,追加后,ns的后续子节点关联已经断开 } } return el; }
修改办法:
Ext.dom.Helper.prototype.ieTable = function(depth, openingTags, htmlContent, closingTags){ var detachedDiv=document.createElement('div');//由于闭包 ,无法访问顶部定义的变量 detachedDiv.innerHTML = [openingTags, htmlContent, closingTags].join(''); var i = -1, el = detachedDiv, ns,nx; while (++i < depth) { el = el.firstChild; } // If the result is multiple siblings, then encapsulate them into one fragment. if (el.nextSibling) { nx=ns=el; el = document.createDocumentFragment(); while (ns) { nx=ns.nextSibling;//保证能获取到后续元素 el.appendChild(ns);//保证插入第一个元素 ns=nx; } } return el; };
相关推荐
NULL 博文链接:https://tipx.iteye.com/blog/718279
这是利用sencha cmd 生成的GridFilterDemo工程中的app和build文件夹,其余文件过大并且与主题无关,因此未包含。具体方法,请参看我的博客: 《Extjs4.2 Grid Filter Feature 表格过滤特性》
Extjs 4.2分组小计
extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台extjs动态生成表格,前台+后台
extjs树型表格组件的使用示例,详细说明可以参见http://blog.csdn.net/snail_spoor/article/details/39698037
EXTJS4 GRID 表格 分页 编辑 添加判断 颜色判断 分组 等示例
Extjs4多选树,支持多选和单选,能够实现默认值选中,数据存放在json,里面有明确的提示信息。很适合初学者借鉴学习
目录: 一 Extjs 基础 ...EXTJS4自学手册——页面控件(表格的特性属性) EXTJS4自学手册——页面控件(表格的插件) EXTJS4自学手册——页面控件(树形控件) EXTJS4自学手册——页面控件(表单控件)
用extjs技术显示表格的信息,不过首先要导入extjs所需的库文件
基于Extjs4官方的例子,做了一个关于MVC和Grid增删改的小例子
这几个月以来自己做extjs4开发整理下来的一些技术要点
ExtJS4 2学习 21 动态菜单与表格数据展示操作总结
extjsDemo2 form panel 一个extjs的demo。1、描绘了表格的属性;2、一个简单的页面布局。供参考。
extjs 简单表格呈现extjs 简单表格呈现extjs 简单表格呈现
EXTjs4.0以下合并表格的例子,想要的来学习一下
Extjs表格合并代码, 由于ie6以外的浏览器的盒模型比较怪异(主因还是我自身不擅处理CSS),列头与数据列的边框有些对不齐(当前的效果已经是尽了最大努力了)
extjs模拟excel表格,所有excel的功能在页面上都能体现出来
使用extjs构造一个矩阵,使用extjs构造一个矩阵。
extjs bug 图标大全
Extjs4的demo 很不错的例子