Javascript IE innerHTML错误
这与在这个话题上已经提出的问题有些不同。我使用了这个建议来实现如下功能:Javascript IE innerHTML错误,javascript,dom,Javascript,Dom,这与在这个话题上已经提出的问题有些不同。我使用了这个建议来实现如下功能: function foo() { document.getElementById('doc1').innerHTML = '<td>new data</td>'; } var oHTMLFactory = document.createElement("span"); function createDOMElementFromHTML(sHtml) { switch (sHtm
function foo() {
document.getElementById('doc1').innerHTML = '<td>new data</td>';
}
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;
}
函数foo(){
document.getElementById('doc1')。innerHTML='newdata';
}
为此:
function foo() {
newdiv = document.createElement('div');
newdiv.innerHTML = '<td>new data</td>';
current_doc = document.getElementById('doc1');
current_doc.appendChild(newdiv);
}
函数foo(){
newdiv=document.createElement('div');
newdiv.innerHTML='新数据';
当前文档=document.getElementById('doc1');
当前_doc.appendChild(newdiv);
}
但这仍然不起作用。在这两种情况下,在包含innerHTML的行上都会发生“未知运行时错误”
我认为创建newdiv元素并在其上使用innerHTML可以解决问题?在Internet Explorer中不可能单独创建td或tr。同样的问题在其他浏览器中也存在了相当长的一段时间,但是这些浏览器的最新版本不再存在这个问题 您有两种选择:
function foo() {
document.getElementById('doc1').innerHTML = '<td>new data</td>';
}
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;
}
var oHTMLFactory=document.createElement(“span”);
函数createDOMElementFromHTML(sHtml){
开关(sHtml.match(/^我发现这(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 += "";
var szBR=“\r\n”;
var szClass=“myTable”;
var szSelector=“#divDisplay123”;
var szSelector2=“divDisplay123”;
var pnlID=“myTable2”;
var szRtn=
“+szBR+
"";
$(szSelector).append(szRtn);
对于(var y=0;y,您可以创建自己的.innerHTML填充/polyfill。我刚刚编写了一些代码来修复IE中.innerHTML的另一个有问题的方面:清除child.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)
也许我可以指出,它不是div元素的有效子元素。