4

Prototype 1.6 の「new Element(...)」を使用して、<thead> と <tbody> の両方を持つ <table> 要素を作成しようとしていますが、IE6 では何も起こりません。

var tableProto = new Element('table').update('<thead><tr><th>Situation Task</th><th>Action</th><th>Result</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td></tr></tbody>');

次に、次のようにコピーを挿入しようとしています。

$$('div.question').each(function(o) {
  Element.insert(o, { after:$(tableProto.cloneNode(true)) });
});

私の現在の回避策は、<table> 要素の代わりに <div> を作成し、それをすべてのテーブル HTML で「更新」することです。

どうすればこれを成功させることができますか?


Python の mmap モジュールを使用すると、ファイルに挿入できます。次のサンプルは、Unix で実行する方法を示しています (Windows の mmap は異なる場合があります)。これはすべてのエラー状態を処理するわけではなく、元のファイルが破損したり失われたりする可能性があることに注意してください。また、これはユニコード文字列を処理しません。

import os
from mmap import mmap

def insert(filename, str, pos):
    if len(str) < 1:
        # nothing to insert
        return

    f = open(filename, 'r+')
    m = mmap(f.fileno(), os.path.getsize(filename))
    origSize = m.size()

    # or this could be an error
    if pos > origSize:
        pos = origSize
    elif pos < 0:
        pos = 0

    m.resize(origSize + len(str))
    m[pos+len(str):] = m[pos:origSize]
    m[pos:pos+len(str)] = str
    m.close()
    f.close()

「r+」モードで開いたファイルで mmap を使用せずにこれを行うこともできますが、挿入位置から EOF までのファイルの内容を読み取って一時的に保存する必要があるため、不便で効率的ではありません。巨大になる。

4

2 に答える 2

5

結局のところ、質問で提供したサンプル コードに問題はありません。IE6 で問題なく動作します。私が直面していた問題は、コンストラクターで <table> 要素のクラスを誤って指定していたことですが、私の例ではそれを省略していました。

「実際の」コードは次のとおりであり、正しくありません。

var tableProto = new Element('table', { class:'hide-on-screen'} ).update('<thead><tr><th>Situation Task</th><th>Action</th><th>Result</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td></tr></tbody>');

これは Firefox では正しく動作しますが、間違っているため IE6 では失敗します。

このコンストラクターを介して要素に属性を追加する正しい方法は、属性名だけでなく、文字列を提供することです。次のコードは、両方のブラウザーで機能します。

var tableProto = new Element('table', { 'class':'hide-on-screen'} ).update('<thead><tr><th>Situation Task</th><th>Action</th><th>Result</th></tr></thead><tbody><tr><td>a</td><td>b</td><td>c</td></tr></tbody>');

「クラス」は JavaScript の予約語であるため、エラーが発生します。どっ!

これを、実際のコードを提供しない人への教訓にしましょう!

于 2008-09-25T04:21:25.347 に答える
2

プロトタイプの .update() メソッドが内部的に .innerHTML を設定しようとすると、IE では失敗します。IE では、テーブル要素の .innerHTML は readonlyです。

ソース:

http://webbugtrack.blogspot.com/2007/12/bug-210-no-innerhtml-support-on-tables.html

于 2008-09-25T00:59:13.787 に答える