extjs的html绑定变量,jquey中的事件绑定 - paul_cheung-js中变量的作用域-ExtJs实践(2)——ExtJs在IE下存在的一个bug - 蒋叶湖_169IT.COM...

今天在使用ExtJs的时候,发现在IE下存在一个问题,不知道是不是Extjs本身的Bug。如果在一个页面上输出一串文字(非节点),例如:

Hello, Leepy!

其他的…

会弹出一个提示“对象不支持此属性或方法”的对话框。利用IE调试工具发现,错误的地方落在:

于是调试跟踪了下变量:

发现nodeType为3,根据Javascript规范:

nodeType

nodeType 属性可返回节点的类型。

最重要的节点类型是:

元素类型                  节点类型

元素element                1

属性attr                      2

文本text                     3

注释comments            8

文档document             9

说明会产生一个文本的元素。但是如果是文本的元素,因此el.ownerDocument.createRange(),就会弹出对象不支持此属性或方法。而这里必须保证它的元素nodeType必须为1。

那么怎么解决这个问题呢?最简单的办法应该就是把文本包在一个节点上,如里头,或者把全部的Body下嵌套一个span,如

Hello, Leepy!

其他的…

这样就能够顺利通过调试

我这里介绍一个方法就是在ext.all.debug.js里头修改相关的代码(如果是Bug的话,还是能够在extjs库中进行修正吧)

insertHtml: function (where, el, html) {

var hash = {},

hashVal,

setStart,

range,

frag,

rangeEl,

rs;

if (el.nodeType == 3) {

var span = document.createElement('span');

//parentSpan = el.parentNode.insertBefore(span);

parentSpan = el.parentNode.insertBefore(span, el); //firefox的insertBefore需要具有第二个参数,否则会报错

parentSpan.appendChild(el);

el = parentSpan;

}

where = where.toLowerCase();

hash[beforebegin] = ['BeforeBegin', 'previousSibling'];

hash[afterend] = ['AfterEnd', 'nextSibling'];

if (el.insertAdjacentHTML) {

if (tableRe.test(el.tagName) && (rs = insertIntoTable(el.tagName.toLowerCase(), where, el, html))) {

return rs;

}

hash[afterbegin] = ['AfterBegin', 'firstChild'

最新技术文章:

&nbsp

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值