您的位置:首页 > Web前端 > JavaScript

ExtJs实践(2)——ExtJs在IE下存在的一个bug

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

<body>

Hello, Leepy!

<span>其他的…</span>

</body>

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

代码

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'];

hash[beforeend] = ['BeforeEnd', 'lastChild'];

if ((hashVal = hash[where])) {

el.insertAdjacentHTML(hashVal[0], html);

return el[hashVal[1]];

}

} else {

range = el.ownerDocument.createRange();

setStart = 'setStart' + (endRe.test(where) ? 'After' : 'Before');



}

这里红色字体的意思是,首先创建一个span元素,然后将el的父节点下插入这个元素,然后在把el放入parentSpan中,最后给el重新赋值。这样就完成了文本元素的包装。

最后再看下结果,调试通过了。

这里是我在使用Extjs遇到的一个问题,给碰到该问题的朋友指明一个方向:)
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: