2009-04-21 3 views
3

В моем текущем приложении мне нужно скопировать содержимое одной таблицы в другую ... С настройкой innerHTML он отлично работает в FF ... но не в IE8 ... Код, который я использовал для копирования в FF:Скопируйте содержимое одной таблицы в другую

getID("tableA").innerHTML = getID("tableB").innerHTML; 
// getID is a custom function i wrote to provide a shorter version of document.getElementById(); 

Таблица A пуста (существует только тег tbody). TableB выглядит так:

 

table 
    tbody 
    tr 
     td "Content" /td 
     td "Content" /td 
    /tr 
    /tbody 
/table 
 

Я уже пробовал использовать nodeValue .. или appendData ... или outerHTML .. но ничего действительно работал ...

ответ

7

Internet Explorer не не позволяет редактировать внутри из таблиц с innerHTML - это все или ничего.

Поскольку вы пытаетесь использовать innerHTML для копирования информации, полная копия должна быть безопасной (т.е. не имеют каких-либо атрибутов идентификаторов, которые могут стать дублированный), в этом случае я бы сделал это:

var source = document.getElementById('tableA'); 
var destination = document.getElementById('tableB'); 
var copy = source.cloneNode(true); 
copy.setAttribute('id', 'tableB'); 
destination.parentNode.replaceChild(copy, destination); 
+0

работал отлично ^^ спасибо !! – SvenFinke

+0

Nice Share. Может кто-нибудь прокомментировать, если это средство, которое будет работать в FF/Safari/Chrome и т. Д.? – MikeJ

+0

Упс. Я имел в виду метод, который будет работать более универсально? – MikeJ

0

Я немного удивлен, узнав, что это не исправлено для IE 8. Говорю, рассказывайте о том, как тащить ноги. Это преднамеренное упущение в реализации внутреннего браузера Internet Explorer - вы не можете установить innerHTML в таблицу. Создатель этой функции предложил an explanation and a workaround. В принципе, вы можете завладеть фактическим узлом tbody и использовать replaceChild(), чтобы превратить труп оригинальной таблицы в это.

Смежные вопросы