2012-01-27 41 views
2

我有一些javascript,看起来像这样:使用文本和.innerHTML插入元素是错误的吗?

var sel = '<option value="{value}" {selected}>{name}</option>'; 
... 
$(index + '_expiry').innerHTML = sel; // $(index + '_expiry) is a select. 

这工作得很好,在Firefox,而不是在Internet Explorer中 - 甚至没有IE9。

There is already a solution to this problem涉及在DOM中创建新元素而不是更改innerHTML。

通过操作.innerHTML将新元素插入页面是否是错误的?我在我的网站上使用了innerHTML的方法,这很容易。它也适用于简单的元素,如.div

虽然IE通常很烦人,但新版本有更严格的JavaScript解析器,可能更正确 - 例如,它不喜欢创建为['a','b','c',]的数组。

那么,使用.innerHTML在DOM中创建新的HTML元素是否糟糕,效率低下,不可靠或类似?我应该使用它仅用于插入纯文本吗?或者这只是IE benig固执?

+1

'新版本有严格的JavaScript解析器,可能是更正确的 - 例如,它不象作为创建数组[“一”,“B”,“C”,]'其实是进行了明确_incorrect_; '[ECMA-262:A.3]'允许尾随逗号。 – 2012-01-27 16:55:37

+0

我希望看到这转移到编程stackexchange ...我也一直在想这个。 – 2012-01-31 02:08:15

回答

3

那么,是不是坏

主观

低效

通常更有效,则在运行时间上的替代品。成本来自确保琴弦结构合理。

不可靠

浏览器是一致的(尽管与其他浏览器不总是),所以你可以依靠体面测试代码。

或者这只是IE benig固执?

IE不喜欢编辑某些元素(特别是表格和选择元素)的内部。

1

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

$(index + '_expiry').html('<option value="{value}" {selected}>{name}</option>'); 
+0

我没有使用JQuery。 – Oliver 2012-01-27 16:53:26

+1

再次证明为什么'$'不是[良好的变量/函数名称](http://en.wikipedia.org/wiki/Self-documenting)。 – Quentin 2012-01-27 16:55:05

+0

@Quentin我想过包括'mootools'的标签,但这与问题的主旨并不相关,所以我没有。 – Oliver 2012-01-27 16:55:58

1

innerHTML是完全正常的,如果你的代码实际上是正确的。使用DOM操作的一点是,它是不可能的,因为创建一个错字或因为,比方说,无论什么进入{name}占位符值包含HTML语法格式错误的HTML。它被认为更好,因为它有助于防止错误 - 当您生成的HTML块像一个简单标签一样小时,这可能是一种洗涤。

相关问题