这与已就此主题提出的问题略有不同。我用这个建议来改变这样的函数:
function foo() {
document.getElementById('doc1').innerHTML = '<td>new data</td>';
}
进入这个:
function foo() {
newdiv = document.createElement('div');
newdiv.innerHTML = '<td>new data</td>';
current_doc = document.getElementById('doc1');
current_doc.appendChild(newdiv);
}
但这仍然无效。在两种情况下,包含innerHTML的行都会出现“未知的运行时错误”。
我认为创建newdiv元素并在其上使用innerHTML可以解决问题吗?
答案 0 :(得分:4)
无法在Internet Explorer中单独创建td或tr。同样的问题在其他浏览器中也存在了相当长的一段时间,但是这些问题的最新版本不再受此问题的影响。
您有两个选项:
例如:
var oHTMLFactory = document.createElement("span");
function createDOMElementFromHTML(sHtml) {
switch (sHtml.match(/^<(\w+)/)) {
case "td":
case "th":
sHtml = '<tr>' + sHtml + '</tr>';
// no break intentionally left here
case "tr":
sHtml = '<tbody>' + sHtml + '</tbody>';
// no break intentionally left here
case "tbody":
case "tfoot":
case "thead":
sHtml = '<table>' + sHtml + '</table>';
break;
case "option":
sHtml = '<select>' + sHtml + '</select>';
}
oHTMLFactory.innerHTML = sHtml;
return oAML_oHTMLFactory.getElementsByTagName(cRegExp.$1)[0] || null;
}
希望这有帮助!
答案 1 :(得分:0)
我发现这个(innerHTML + =“”)会导致表格出现。缺点是应用于表格或表格内元素的任何javascript事件都会被吹走。
var szBR = "\r\n";
var szClass = "myTable";
var szSelector = "#divDisplay123";
var szSelector2 = "divDisplay123";
var pnlID = "myTable2";
var szRtn =
"<table id=\"" + pnlID + "\" class=\"" + szClass + "\" >" + szBR +
"</table>";
$(szSelector).append (szRtn);
for (var y=0; y<10; y++)
{
var pnlID_TR = pnlID + "_TR_" + y;
szRtn =
" <tr id=\"" + pnlID_TR + "\" class=\"" + szClass + "_TR\">" + szBR +
" </tr>";
$("#" + pnlID).append (szRtn);
for (var x=0; x<5; x++)
{
var pnlID_TD = pnlID + "_TD_" + x + "_" + y;
szRtn =
" <td id=\"" + pnlID_TD + "\" class=\"" + szClass + "_TD\">" + szBR +
"Hello World2" + szBR +
" </td>";
$("#" + pnlID_TR).append (szRtn);
}
}
$(szSelector).append ("<HR>");
document.getElementById (szSelector2).innerHTML += "";
答案 2 :(得分:0)
您可以创建.innerHTML自己的填充/填充。我刚刚制作了一些代码来解决IE中.innerHTML的另一个问题:清除子.innerHTMLs:
您可以修改行为。这里有一些代码可以防止IE中其他引用元素的垃圾收集:
if (/(msie|trident)/i.test(navigator.userAgent)) {
var innerhtml_get = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").get
var innerhtml_set = Object.getOwnPropertyDescriptor(HTMLElement.prototype, "innerHTML").set
Object.defineProperty(HTMLElement.prototype, "innerHTML", {
get: function () {return innerhtml_get.call (this)},
set: function(new_html) {
var childNodes = this.childNodes
for (var curlen = childNodes.length, i = curlen; i > 0; i--) {
this.removeChild (childNodes[0])
}
innerhtml_set.call (this, new_html)
}
})
}
var mydiv = document.createElement ('div')
mydiv.innerHTML = "test"
document.body.appendChild (mydiv)
document.body.innerHTML = ""
console.log (mydiv.innerHTML)