0

JavaScript関数で次のことを実行しようとするページがあります。

document.getElementById("chatTable").innerHTML += "<tr><td colspan=\"3\">      ⏎
    <span color=\"purple\">------------Switched to channel: " + channelName +  ⏎
    "------------</span></td></tr>";

これは、私が試した他のすべてのブラウザー (Firefox、Chrome、Safari、Android 電話ブラウザー、iPhone ブラウザー) で機能しますが、IE9 では機能しません。はい、ID を持つテーブルがchatTableあり、channelName変数は実際に設定されています。テーブルオブジェクトのDOMを使用して実際にテーブル行を追加できるかもしれないことは理解していますが(それか何かだと思いますinsertRow())、今ではそれが原則の問題になり、気が狂いました。+=私はちょうど=運が悪いに変更しようとしました。また、テーブルをjavascriptで独自の変数に設定してから、innerHTMLを編集しようとしましたが、まだ運がありません。ああ、私は持っています:

<!DOCTYPE HTML>

マイページで。私は何を間違っていますか?!

4

2 に答える 2

6

.innerHTMLまたは.outerHTMLは、COL、COLGROUP、FRAMESET、HTML、STYLE、TABLE、TBODY、TFOOT、THEAD、TITLE、または TR のいずれの要素とも一緒に使用できません。

Microsoft のテーブル オブジェクト モデルを使用して Internet Explorer でテーブルを操作するには、動的にテーブルを作成するを参照してください。

これは IE の将来のバージョンで変更される可能性があると思いますが、現時点ではこれが残っています。

于 2012-07-09T02:21:18.503 に答える
1

Jim の回答に加えて、HTML を追加すると、既存のテーブルが破棄されて再構築されます。これを実行できるブラウザでも、行を追加するための一般的なより良い解決策は次のとおりです。

var table = document.getElementById("chatTable"),
    row = table.insertRow(-1), //-1 means at end
    cell = row.insertCell(0),
    span = document.createElement("span");

span.style.color = "purple";
span.appendChild(document.createTextNode("------------Switched to channel: " + channelName + "------------"));
cell.colSpan = 3;
cell.appendChild(span);
row.appendChild(cell);
table.appendChild(row);

通常は高速で、テーブル内のものにアタッチした既存のイベント ハンドラーが失われることはありません。

于 2012-07-09T02:32:29.040 に答える