.InnerHTML在Internet Explorer中无法正常工作

时间:2011-03-09 09:33:36

标签: javascript html string internet-explorer innerhtml

我想为HTML控件的innerHTML分配链接标记。但这在Internet Explorer中无法正常工作。但是当我尝试分配<link>&amp;以外的任何内容时<style>代码可以正常使用。

<html>
<head>
<script type="text/javascript">
function getValue()
  {
  var x=document.getElementById("myHeader");
  x.innerHTML='<link \"http://test.com/css/template.css\" rel=\"stylesheet\"><div>abc</div>';
  alert(x.innerHTML);
  }
</script>
</head>
<body>

<h1 id="myHeader" onclick="getValue()">Click me!</h1>

</body>
</html>

此外,如果我更改上面<div>标记和<link>标记的序列,它也可以在Internet Explorer中正常工作。

x.innerHTML='<div>abc</div><link \"http://test.com/css/template.css\" rel=\"stylesheet\">';

请建议!感谢。

编辑:这是带有ExtJs的Internet Explorer中的错误。更多信息,请访问

http://www.sencha.com/forum/showthread.php?30110-internet-explorer-autoLoad-css-not-applied

10 个答案:

答案 0 :(得分:11)

innerHTML在IE中不起作用,但使用DOM方法:

function getValue()
{
  var x=document.getElementById("myHeader")
    , link = document.createElement('link')
    , div = document.createElement('div');
  x.innerHTML = '';
  x.appendChild(link);
  x.appendChild(div);
  div.innerHTML = 'abc';
  link.href = 'http://test.com/css/template.css';
  link.rel = 'stylesheet';
  alert(x.innerHTML);
}

虽然reference表示link标记只能出现在标题中,但如果您在所有浏览器中使用我提供的代码,那么样式链接 的效果会非常有趣我试过(IE,firefox,chrome)。请参阅this jsfiddle(我在test.com中使用了真正的css-href; - )

如果您想将link放入正确的部分(<head>),请使用:

var header = document.getElementsByTagName('head')[0];
  , link = document.createElement('link');
header.appendChild(link);
link.href = 'http://test.com/css/template.css';
link.rel = 'stylesheet';

答案 1 :(得分:8)

对于初学者,您在<link>上缺少href属性。

<link href=\"http://test.com/css/template.css\" rel=\"stylesheet\" />

不要将链接和样式标记放入<body>。将它们注入<head>

  var link = document.createElement("link");
  link.href = "http://test.com/css/template.css";
  link.rel = "StyleSheet";
  document.head.appendChild(link);

答案 2 :(得分:3)

很多人都忽略了这一点。他试图做的事情(在修复缺少href属性的错误之后)可以在任何其他浏览器中使用。

IE 8及更低版本有一个错误,如果设置innerHTML时文本中的第一个元素是标记(可能是其他元素),则会被忽略。如果你只是先放一个空格或换行符或其他标签,那就可以了。

当他说<div>首先修复它时,他甚至发现了这一点。

它无效,但这就是你解决它的方法。

修改:换句话说:foo.innerHTML = "\n" + yourHtmlWithLinkInIt;

答案 3 :(得分:2)

<link>只能包含在<head>

  

此元素定义链接。与A不同,   它可能只出现在HEAD部分   一份文件,虽然可能会出现   任何次数。

参考:http://www.w3.org/TR/html401/struct/links.html#edef-LINK

答案 4 :(得分:1)

我认为问题在于<link>是一个空元素。将您的代码更改为:

x.innerHTML='<link \"http://test.com/css/template.css\" rel=\"stylesheet\" /><div>abc</div>';
                                                     // this is the trick ^^^

编辑:我没有对此进行测试,但这是第一件伤害我眼睛的事情。

EDIT2: <link>标记只应出现在<head>部分内...我希望您知道自己要做什么。

答案 5 :(得分:1)

正确设置文本,我建议你去我一般做的。如果你有ie 8然后在ie中打开html。按f12显示开发人员工具。现在在新窗口中转到脚本标记。设置javascript开始的断点。现在按下按钮开始调试。通过某些事件或执行方式执行js函数。现在在javascripg函数中的对象上,当断点点击时,右键单击并添加watch。展开对象并查看您的早期文本所在的位置以及新文本的位置。

答案 6 :(得分:0)

你到底想要实现什么,作为你的最终目标?如前所述,链接标记应该只出现在html文档的<head>中。

JavaScript可能是一个棘手的东西,它的香草味道,你最好使用一个框架,我个人最喜欢的是MooTools虽然我听说JQuery非常好,但MooTools有OOP(对于真正的程序员 - tehe )。

这将允许你做更多事情,并可能达到你的最终目标,如果你让我/我们知道你应该得到一个更直接的答案你的问题。

答案 7 :(得分:0)

事情是它适用于FireFox和谷歌Chrome,但不适用于IE。

这是因为你不能用字符串设置InternetExplorer的innerHTML标签,如果字符串不是文本,即HTML元素。

我经历过尝试使用AJAX动态将ComboBox填充到表格单元格中...

解决方案是使用JQuery 然后你可以这样做:
$("#YourElementID").html('<link \"http://test.com/css/template.css\" rel=\"stylesheet\" /> <div>abc</div>');
和JQuery将为你做这些东西,selbie和KooiInc描述。

答案 8 :(得分:0)

这里为“link”和“sytle”找到了不同的简单解决方案,但需要使用appendChild添加“script”。与Vectorjohn所说的非常类似,也提供了更多的参考资料。

http://allofetechnical.wordpress.com/2010/05/21/ies-innerhtml-method-with-script-and-style-tags/

答案 9 :(得分:0)

document.getElementById('tblList').outerHTML="ypur html";