在 IE 中使用 .innerHTML 添加选项元素
Posted
技术标签:
【中文标题】在 IE 中使用 .innerHTML 添加选项元素【英文标题】:Adding option elements using .innerHTML in IE 【发布时间】:2012-01-23 08:44:25 【问题描述】:我有一个 txt 变量,其中包含我需要为下拉列表设置的 html 字符串。该代码在除 IE 之外的所有其他浏览器中都可以正常工作。基本代码如下所示。
带有更多代码的while循环
document.getElementById('theSelector').innerHTML = txt;
'theSelector'
是我的表单的选择元素的 ID
所以基本上 IE 会弹出并且不会生成我的列表。如果您想查看源代码和我正在做的一切,我将在下面发布我的网页。如果您想查看该网站应该如何运行,只需在另一个不是 ie 的浏览器中运行它即可。
http://1wux.com/Resume/signUp.html
【问题讨论】:
我认为IE不会让你.innerHTML = '<options/>';
。你必须使用 DOM 方法。
如果我没记错的话,这是一个长期存在的 IE 错误。 support.microsoft.com/kb/276228 这个错误报告是在 2003 年提交的。我遇到过一次,最简单的解决方案是使用亚当的答案。
【参考方案1】:
根据您没有生成列表的评论,以及您尝试添加选项的 Jared 评论,请尝试以下操作:
var list = document.getElementById('theSelector');
var newOp = document.createElement("option");
newOp.text = "Txt";
newOp.value = "1";
list.options.add(newOp);
编辑
根据 Jared 的评论,以下可能为您提供一点性能优势:
list.options[list.options.length] = newOp;
【讨论】:
@JaredFarrish - 超越创造那个小提琴 - 对你 +1 - 你离闪亮的徽章只有一个距离:) 哪种方法 -add
而不是 push
,通常像数组使用?
不是更好的支持吗?老实说,我通常只做list.options[list.options.length]
。习惯的力量,我记得最近听说它被认为更有效。
这是我读到的文章:scottlogic.co.uk/2010/10/javascript-array-performance,虽然显然我上面的方法不是最有效的,array[i]
是。
@JaredFarrish- 这真的很有趣 - 我根据您的评论添加了更新
@JaredFarrish - 我在您撰写上述评论时编写了我的编辑。我们确实组成了一支优秀的团队:)【参考方案2】:
正如其他人所提到的,这是所有版本的 IE 中的错误。我会使用@AdamRackis 的解决方案,但如果您必须使用字符串构建 HTML,唯一的解决方法似乎是使用 outerHTML
并在字符串中包含您的 <select>
。
演示:http://jsfiddle.net/ThinkingStiff/TWYUa/
HTML:
<select id="select"></select>
脚本:
var options = '<select id="select"><option>one</option><option>two</option></select>';
document.getElementById( 'select' ).outerHTML = options;
【讨论】:
谢谢大家!我看看能不能解决。【参考方案3】:使用 Jquery
$('#theSelector').html(txt);
【讨论】:
以上是关于在 IE 中使用 .innerHTML 添加选项元素的主要内容,如果未能解决你的问题,请参考以下文章
尝试使用javascript添加样式标签(IE8中的innerHTML)
Django,Javascript:通过 javascript innerHtml 注入 DOM 的表单在提交时崩溃 google chrome 选项卡。在 IE 中工作
innerHTML 适用于 IE 和 Firefox,但不适用于 Chrome
innerHTML 不适用于 IE 中的 <datalist> HTML5 元素