1

X行をIEのテーブルに挿入する最も単純なjavascriptの方法は何ですか?

テーブルの html は次のようになります。

<table><tbody id='tb'><tr><td>1</td><td>2</td></tr></tbody></table>

私がする必要があるのは、古い本文を削除して、1000 行の新しい本文を挿入することです。私は1000行をjavascript文字列変数として持っています。

問題は、IE のテーブルに innerHTML 関数がないことです。私はそれを行うための多くのハックを見てきましたが、あなたの最高のものを見たいです.

注: jquery またはその他のフレームワークの使用はカウントされません。

4

4 に答える 4

6

innerHTML=これは、IE を実装した人物による、IEをどのように実行させtbody.innerHTML="<tr>..."たかについての素晴らしい記事です。

最初は、IE は innerHTML で変更されたテーブルの再描画を実行できないと思っていましたが、この制限の責任は自分にあることを思い出しました。

ちなみに、彼が使用するトリックは、基本的にすべてのフレームワークがtable/tbody要素に対して行う方法です。

編集:@mkoryak、あなたのコメントは、想像力がゼロであり、答えに値しないことを教えてくれます。しかし、私はとにかくあなたをユーモアします。あなたのポイント:

> 彼は私が必要とするものを挿入していません

なに?彼は行 (HTML 文字列として持っている) をtable要素に挿入しています。

> 彼は追加の隠し要素も使用しています

この要素のポイントは、IE が必要とするのは「コンテキスト」だけであることを示すことでした。代わりに、オンザフライで作成された要素を使用できます ( document.createElement('div'))。

>しかも記事が古い

私は二度とあなたを助けません;)

しかし真剣に、他の人がそれをどのように実装したかを見たい場合は、jQuery.clean()、またはプロトタイプの のjQuery ソースを見てくださいElement._insertionTranslations

于 2009-03-02T22:37:34.890 に答える
0

jQuery と同じように実行します。その周りに追加<table></table>、ドキュメントに挿入し、必要なノードを必要な場所に移動し、一時要素を捨てます。

于 2009-03-02T22:28:36.113 に答える
0

コードは次のようになりました。

    if($.support.scriptEval){
    //browser needs to support evaluating scripts as they are inserted into document
        var temp  = document.createElement('div');
    temp.innerHTML = "<table><tbody id='"+bodyId +"'>"+html;
    var tb = $body[0];
    tb.parentNode.replaceChild(temp.firstChild.firstChild, tb);
    temp = null;
    $body= $("#" + bodyId);
    } else {
    //this way manually evaluates each inserted script
        $body.html(html);
    }

事前に存在する必要があるもの: 'bodyId' の ID を持つ本体を持つテーブル。$body はグローバル変数 (または関数にクロージャがある) であり、IE はオンザフライで html に挿入されるスクリプトを評価しないため、そこにも jquery が少しあります。

于 2009-03-03T15:29:01.463 に答える
0

私は同じ問題を抱えていました (他の多くの人がそうであるように)。

document.createelement ('tr') 経由で tr を作成し、同じ方法で td を作成する必要があります。td を tr に appendchild し、tr を tbody (テーブルではない) に appendchild してから、作成した td を innerhtml にすることができます。これは私が使用していたie8でした。基本的にテーブル構造は createelement で作成する必要がありますが、残りは innerHTML 化できます。私はIE8デバッガーでこの監視を行っていましたが、それを追加すると表示され(tr.innerhtml="blah"を実行した場合)、エラーは発生しませんが、表示されず、html domビューは非常に壊れたテーブル (td は表示されませんでしたが、/td は表示されました)

そのため、最後に createelement 呼び出しで tr AND td を実行すると、正しい外観の dom が作成され、ページが正しく描画されました。

于 2011-12-10T16:38:05.177 に答える