使用YUI更改IE 8中脚本标记的内容

时间:2011-11-23 17:56:36

标签: javascript internet-explorer yui

以下脚本在Firefox中正常工作但在IE 8中崩溃时出现错误“未知运行时错误”。

YUI().use('node', function (Y) {
    if (Y.one('#testel') == null) {
        Y.one('head').append(Y.Node.create('<script id="testel" />'));
    }
    Y.one('#testel').set('text', 'Wish this would work in IE!');
    console.log( Y.one('#testel').get('text') );
});

我在IE中尝试过类似的事情:

Y.one('#testel').set('innerHtml', 'Wish this would work in IE!');
Y.one('#testel').set('html', 'Wish this would work in IE!');
Y.one('#testel').setContents('Wish this would work in IE!');

唯一不同的是它有时会提供更有用的错误“对方法或属性访问的意外调用。”,这使我认为在IE中无法更改脚本标记的文本?

在搜索时,我在处理IE中的表元素时发现了很多对上述问题的引用,但在这些情况下的解决方法似乎并不适用于脚本标记。

有没有办法在IE中完成上述操作? (我只在IE 8中对此进行了测试,但我认为问题在6,7中是相同的。)

谢谢!

1 个答案:

答案 0 :(得分:0)

这是一个解决问题的工作,并在IE 8中工作(尚未检查6,7)。

您似乎只能在创建脚本标记时设置文本,因此我不会尝试像问题中的代码一样更新文本,而是在我想要更改文本时随时删除并重新创建脚本标记(和这也适用于FF。

例如:

YUI().use('node', function (Y) {

    var writeToScript = function(text) {
        if (Y.one('#asdf') != null)
            Y.one('#asdf').remove();
        Y.one('head').append(Y.Node.create("<script id='asdf'>"+ text + " </script>"));
    }

    writeToScript("Hello there!");
    console.log( Y.one('#asdf').get('innerHTML') );
    writeToScript("How are you?");
    console.log( Y.one('#asdf').get('innerHTML') );
    writeToScript("Goodbye");
    console.log( Y.one('#asdf').get('innerHTML') );
});

但是,如果有人能够解释为什么设置文本不能按照问题中的说明工作,或者如果你有另一种方法可以在不删除/重新添加的情况下完成此操作(这对性能有害吗?),请添加你的答案我会投票!!这项工作使得这不那么紧迫,但我仍然很好奇!!