0

テキストボックスの行を複数の行に分割する単純な JavaScript 関数があります。機能は次のとおりです。

function newline(componentID)
{

    var cols = document.getElementById(componentId).getElementsByTagName('td');
    var colslen = cols.length;
    var i = -1;
    var tempInnerHTML = '<tbody><tr>';

    while (++i < colslen)
    {
        tempInnerHTML += '<td>' + cols[i].innerHTML + '</td>'
        if ( i == 9 || i == 19 || i==29 ) { tempInnerHTML += '</tr><tr>'; }
    }
    tempInnerHTML += '</tr></tbody>';
    document.getElementById(componentId).InnerHTML = tempInnerHTML; 

}

この関数は FireFox では問題なく動作しますが、IE 9.0 では動作しません。理由はdocument.getElementById(componentId).InnerHTML = tempInnerHTML; 、IE 9.0 で innerHTML を直接設定できないためです。

だから私は上記の関数を次のように変更しようとしました:

function newline(componentID)
{

    var cols = document.getElementById(componentId).getElementsByTagName('td');
    var colslen = cols.length;
    var i = -1;
    var tempInnerHTML = '<tbody><tr>';

    while (++i < colslen)
    {
        tempInnerHTML += '<td>' + cols[i].innerHTML + '</td>'
        if ( i == 9 || i == 19 || i==29 ) { tempInnerHTML += '</tr><tr>'; }
    }
    tempInnerHTML += '</tr></tbody>';
    var div = document.createElement("div");
    div.innerHTML = tempinnerHTML;
    document.getElementById(componentId).appendChild(div.firstChild.tBodies[0]); 

}

ただし、上記の機能は IE 9.0 と同様に FireFox では機能しません。

document.getElementById(componentId).appendChild(div.firstChild.tBodies[0]);

FireFox と IE 9.0 の両方で機能するようにする必要があります。

どんな助けでも大歓迎です。

前もって感謝します!!

4

1 に答える 1

3

これはどのブラウザでも機能しません。

変化する

document.getElementById(componentId).InnerHTML = tempInnerHTML; 

document.getElementById(componentId).innerHTML = tempInnerHTML; 

JavaScript では大文字と小文字が区別されます。


編集後:別のエラーがあります:

tempInnerHTML += '</tr></tbody>';
var div = document.createElement("div");
div.innerHTML = tempinnerHTML;

tbody を div に追加することはできません。一部のブラウザーは、テーブルを挿入することで修正しようとする場合がありますが、これは指定された動作ではありません。要素を作成する必要がありますtable(そして firstChild ステップをスキップします)。とにかく、この div または table を使用するべきではないでしょう。これは役に立たないステップです。tbody を直接作成して追加します。

于 2013-11-02T10:17:03.280 に答える