Javascript 使用文本和.innerHTML插入元素是否错误?

Javascript 使用文本和.innerHTML插入元素是否错误?,javascript,internet-explorer,mootools,Javascript,Internet Explorer,Mootools,我有一些javascript如下所示: var sel = '<option value="{value}" {selected}>{name}</option>'; ... $(index + '_expiry').innerHTML = sel; // $(index + '_expiry) is a select. 这在firefox中运行良好,但在InternetExplorer中不起作用,甚至在IE9中也不起作用 这涉及到在DOM中创建新元素,而不是更改inn

我有一些javascript如下所示:

var sel = '<option value="{value}" {selected}>{name}</option>';
...
$(index + '_expiry').innerHTML = sel; // $(index + '_expiry) is a select.
这在firefox中运行良好,但在InternetExplorer中不起作用,甚至在IE9中也不起作用

这涉及到在DOM中创建新元素,而不是更改innerHTML

通过操纵.innerHTML将新元素插入页面是否错误?我在整个网站上都使用innerHTML方法,这很简单。它在IE中也适用于.div等简单元素

虽然IE经常让人讨厌,但较新版本有一个更严格的javascript解析器,可能更正确——例如,它不喜欢创建为['a'、'b'、'c'、]的数组


那么,使用.innerHTML在DOM中创建新的HTML元素是糟糕的、低效的、不可靠的还是类似的呢?我应该只在插入纯文本时使用它吗?或者这仅仅是IE的顽固不化吗?

您正在使用jQuery,而不是同时使用它。只需使用jQuery:

$(index + '_expiry').html('<option value="{value}" {selected}>{name}</option>');
那么,这不好吗

主观的

低效

就运行时间而言,通常比备选方案更有效。成本来自确保字符串正确构造

不可靠

浏览器是一致的,尽管并不总是与其他浏览器一致,所以您可以依赖经过适当测试的代码

还是这只是benig的固执


IE不喜欢编辑某些元素表的内部内容,特别是选择元素。

如果您的代码实际上是正确的,innerHTML是非常好的。使用DOM操作的要点是,由于输入错误或{name}占位符中的值包含HTML语法,不可能创建格式错误的HTML。它被认为是更好的,因为它有助于防止bug——当你生成的HTML块只有一个简单的标记那么小的时候,这可能是一种清洗。

再次证明了为什么$不是一个标记。@Quentin我考虑过包括“mootools”标记,但它与问题的主旨并不相关,所以我没有。@Quentin这就是为什么我们有问号,不回答基于未经验证的假设的问题。@Oliver:那么你应该把它抽象出来,用文档的用法代替它。getElementById@Blender撇开图书馆的差异不谈,JQuery的.html方法解决了IE的这个问题吗?新版本有一个更严格的javascript解析器,可能更正确-例如,它不喜欢创建为['a'、'b'、'c',]的数组,实际上这是明显不正确的;[ECMA-262:A.3]允许尾随逗号。我希望看到它移到编程堆栈交换。。。我也一直在想这个。