Вставить строки в таблицу - PullRequest
1 голос
/ 03 марта 2009

Какой лучший способ вставки строк в таблицу в IE в виде простого JavaScript-кода.

Таблица HTML выглядит следующим образом:

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

Что мне нужно сделать, это сбросить старое тело и вставить новое с 1000 строками. У меня есть 1000 строк в качестве строковой переменной javascript.

Проблема в том, что таблица в IE не имеет функции innerHTML. Я видел много хаков, чтобы сделать это, но я хочу увидеть ваш лучший.

Примечание: использование jquery или любого другого фреймворка не считается.

Ответы [ 4 ]

6 голосов
/ 03 марта 2009

Вот отличная статья парня, который реализовал IE innerHTML= на , как он заставил IE сделать tbody.innerHTML="<tr>...":

Сначала я подумал, что IE не было способен выполнить перерисовку для модифицированные таблицы с помощью innerHTML, но потом я вспомнил, что я был ответственность за это ограничение!

Между прочим, уловка, которую он использует, заключается в том, как все фреймворки делают это для table / tbody элементов.

Редактировать : @mkoryak, ваш комментарий говорит мне, что у вас нулевое воображение и вы не заслуживаете ответа. Но я все равно буду тебя шутить. Ваши очки:

> он не вставляет то, что мне нужно

Wha? Он вставляет строки (которые он имеет в виде строки html) в элемент table.

> он также использует дополнительный скрытый элемент

Цель этого элемента - показать, что все, что нужно IE, это «контекст». Вместо этого вы можете использовать элемент, созданный на лету (document.createElement('div')).

> а также статья старая

Я больше никогда тебе не помогу;)

А если серьезно, если вы хотите увидеть, как другие реализовали это, взгляните на источник jQuery для jQuery.clean() или прототип Element._insertionTranslations.

0 голосов
/ 10 декабря 2011

У меня была такая же проблема (как и у многих других людей), и после долгой игры вот что я получил для работы.

Вы должны сделать tr через document.createelement ('tr'), а затем сделать td таким же образом. appendchild td к tr, appendchild tr к tbody (не к таблице), ТОГДА вы можете создать HTML-файл, созданный вами, и он будет работать. Это был ie8, который я использовал. В основном структура таблицы должна быть создана с помощью createelement, но остальная часть может быть вложена в HTML. Я делал это, наблюдая в отладчике IE8, и он сказал бы, что добавит его (если я сделал tr.innerhtml = "blah") и не выдаст ошибку, но он не будет отображаться, и представление html dom показало очень испорченный таблица (тд никогда не появлялся, но / тд показывал)

Итак, когда я наконец сделал tr и td вызовами createelement, он создал правильно выглядящий домен и правильно нарисовал страницу.

0 голосов
/ 03 марта 2009

код закончился так:

    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». $ body - это глобальная переменная (или у функции есть замыкание), и там тоже есть немного jquery, потому что IE не выдает скрипты, которые вставляются в html на лету.

0 голосов
/ 03 марта 2009

Делайте так, как это делает jQuery, например. добавьте вокруг него <table> и </table>, вставьте в документ и переместите нужные вам узлы туда, куда вы хотите, и отбросьте временный элемент.

...