2012-01-27 33 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塊像一個簡單標籤一樣小時,這可能是一種洗滌。

相關問題