【问题标题】:Javascript InnerHTML Output WrongJavascript InnerHTML 输出错误
【发布时间】:2012-07-03 14:20:24
【问题描述】:
function test()
{
var formHTML ="";
var frmid ="test123";

var options = ["Test1", "Test2", "Test3", "Test4", "Test5"]
formHTML += "<select id='" + frmid + ">";

console.log(options);

for ( i = 0; i < options.length; i++) {
    var temp = options[i];
    var temp2 = "<option value='" + temp + "'>" + temp + "</option>";
    console.log(temp2);
    formHTML += temp2;
}
formHTML += "</select>";
console.log(formHTML); 
document.getElementById("injected").innerHTML+=formHTML;

}

上面是我在页面中创建一个选择元素的函数,当我调用这个函数时有一个非常奇怪的问题,它只显示选项 test2、test3、test4、test5 而不是一个......

当我使用 console.log 打印出 formHTML 时,它会显示..

<select id='test123><option value='Test1'>Test1</option>
<option value='Test2'>Test2</option>
<option value='Test3'>Test3</option>
<option value='Test4'>Test4</option>
<option value='Test5'>Test5</option>
</select> 

但是如果您运行代码并查看源代码,则 HTML 元素不正确,第一个元素看起来像

 <option value='test1'> Test1

缺少关闭选项标签,

我尝试过调试和更改代码,但这个问题让我很困惑。

是否缺少一些东西有没有更好的方法来解决这个问题?出于速度原因,在操作 DOM 之前,我试图将其全部存储在一个字符串中。 感谢所有帮助,谢谢

【问题讨论】:

  • FWIW,像这样使用 Pure-JS DOM 操作我(正确或错误地)更喜欢使用 document.createElement() 和朋友,以避免潜在的错误和变量的字符串操作带来的歧义。 Example
  • 这种方式除了更喜欢,还有什么好处呢?你能看到我动态注入脚本吗?就像我们正在使用选择一样?
  • 当你说dynamicly inject a script是指dynamically add another &lt;script&gt; tag to the document
  • 是的,没错,我有我的名字 javasscript 文件 general.js 并且我希望能够从该文件中添加 javascript 标记到文档中...
  • 嗯,基本上只是var newScript = document.createElement('script'); newScript.type = 'text/javascript'; newScript.src = 'http://wherever.com/whatever.js'; document.body.appendChild(newScript);的一个案例

标签: javascript html string tags innerhtml


【解决方案1】:

你在这行有错误

formHTML += "<select id='" + frmid + ">";

改成

formHTML += "<select id='" + frmid + "'>";

【讨论】:

  • 谢谢,这么小的问题有点烦人,真不敢相信我错过了!有什么我正在做的事情被认为是回溯练习或更好的方法吗?谢谢
  • 你的代码很好!虽然纯 javascript 很好,但我建议您使用 jquery,这样可以更轻松地完成此类工作
  • 谢谢,试试看:)
猜你喜欢
  • 1970-01-01
  • 2018-06-10
  • 2012-11-25
  • 1970-01-01
  • 2017-11-10
  • 2021-10-01
  • 1970-01-01
  • 1970-01-01
  • 2022-01-20
相关资源
最近更新 更多