Интернет проводник и removeChild () - PullRequest
2 голосов
/ 11 июля 2011

Я использовал elem.removeChild() для удаления элементов из моего документа, но сохранил ссылку JavaScript на этот элемент, чтобы я мог добавить их обратно, когда это необходимо. Прекрасно работает в Firefox и Chrome.

Теперь я заметил, что в IE7 эти элементы уничтожаются при удалении всех их дочерних элементов. Когда я добавляю их обратно в тот же родительский элемент, они относятся к элементу того же типа и сохранили такие вещи, как имя класса, но у них нет дочерних элементов.

Это ожидаемое поведение? Я знаю, что могу изменить свое приложение, чтобы сделать что-то по-другому, но это заняло бы пару часов переделки, и я, очевидно, хотел бы этого избежать. Я всегда предполагал, что это нормально, чтобы удалить элементы, либо с помощью removeChild(), либо путем установки родительского элемента innerHTML в пустую строку, и до тех пор, пока у меня была ссылка на элемент (т.е. переменная указывает на элемент, а не просто идентификатор элемента), можно было свободно добавлять и удалять элементы, не запутав элемент.

Это ошибка в IE, я как-то запутался и что-то еще происходит, или это известное и ожидаемое поведение?

Ответы [ 2 ]

1 голос
/ 01 августа 2011

Спецификация для removeChild прямо не говорит, что дочерние элементы удаляемого узла должны храниться вместе с этим узлом, хотя мне кажется логичным, что они должны это делать, и, очевидно, именно это решили разработчики FF и Chrome. Я не знаю, что спецификация должна делать, если для innerHTML родителя задана пустая строка, но, на мой взгляд, это немного похоже на выражение «стереть то, что было», поэтому в этом случае я думаю, что это разумно для браузер, чтобы выбросить все, что было в этом innerHTML, даже если в коде были ссылки на некоторые из удаленных элементов.

0 голосов
/ 11 июля 2011

Не видя больше вашей реализации, я не уверен, что вы получите больше, чем слепые ответы; вот один:

Вам доводилось работать со строками таблицы? Проверьте этот ответ , Очевидно, <tr> должен подключаться к <tbody> в IE, а не напрямую к <table>.

...