2

我明白了

SCRIPT601:此操作的源 HTML 无效。

ext-all-debug.js,第 6769 行字符 21

在 IE 8 中

这是行。

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

调试时,html中的值为"<a title=\"\">1</a>"

我坚持这个问题好几天了。这与评级功能有关。我认为由于这个错误,在 ie 8 中没有显示评级星。其他浏览器都可以。我在下面给出了相应的代码部分。我正在使用 extjs。

var starLink = star.createChild({
            tag: 'a',
            html: this.values[i],
            title: this.showTitles ? this.titles[i] : ''
        });

并且在创建此元素时,调用将转到以下部分,并且在上面指定的行上发生错误。

 insertHtml : function(where, el, html){
            var hash = {},
                hashVal,
                range,
                rangeEl,
                setStart,
                frag,
                rs;

            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 {
4

2 回答 2

1

IE 对使用 .innerHTML、.insertAdjacentHTML 和类似的东西非常挑剔。

传递的 HTML 必须是完美的结构 - 它不允许任何类型的错误。如果有的话,它根本不会这样做。其他浏览器将执行与文档其余部分相同的“最佳猜测”。

尝试放入一些非常简单的 HTML 值,例如:

<p>Hello World!</p>

你应该会发现它有效。在这种情况下,您需要找出您提供的 HTML 有什么问题。如果它不起作用,那么你还有另一个问题。

于 2012-12-11T13:54:13.573 回答
1

虽然我们不知道您正在创建哪些元素以及在哪里创建,但我假设您正在尝试将新tr元素添加到table. 然而,这在 IE < 10 中是不可能的。较旧的 IE 具有与其他浏览器完全不同的表模型,并且无法访问表insertAdjacentHTML()来创建行(td可以创建 s)。也innerHTML适用于 and 的直接后代,tabletr只读的。

在 IE 中向表中添加新行的最佳方法是使用insertRow(index)method. index是要添加行的地方。默认情况下index是 -1,它在表的末尾添加一个新行。

这篇文章在 MSDN 上动态构建表可能会有所帮助。

BTWif ((hashVal = hash[where]))在较新的浏览器中不再是有效的语法。

于 2012-12-11T16:49:50.357 回答