2009-08-05 3 views
1

У меня есть div, который нужно переместить из одного места в другое в DOM. Поэтому в данный момент я делаю это так:appendChild в IE6/IE7 не работает с существующими элементами

flex.utils.get('oPopup_About').appendChild(flex.utils.get('oUpdater_About')); 

Но, IE, будучи, ну, IE, он не работает. Он работает со всеми другими браузерами, просто не в IE.

Мне нужно сделать это так, как элемент (div) 'oUpdater_About' необходимо повторно использовать, поскольку он заполняется снова и снова.

Так что мне просто нужно иметь возможность перемещать div вокруг DOM, appendChild позволит это произойти во всех браузерах, но IE.

Заранее благодарен!

+0

appendChild всегда работал в IE для меня. Вы уверены, что «flex.utils.get» возвращает фактический узел DOM Element, а не какой-то узкоподобный объект, специфичный для библиотеки? – NickFitz

+0

Определенно, это всего лишь оболочка для сценария document.getElementById. Я попытался заменить его document.getElementById, той же проблемой. Может ли проблема заключаться в том, что я не создаю элемент «на лету»? Это уже существует в DOM onload. Теоретически это не должно! Но вы знаете IE. – jamesmhaley

+0

Я никогда не сталкивался с этой проблемой; IE всегда работал правильно для меня, удаляя элемент из существующего родителя и добавляя его к новому родителю. Попробуйте подключить оба узла к переменным, прежде чем делать добавление, чтобы вы могли использовать alert() (или ваш предпочтительный инструмент отладки), просто чтобы убедиться, что получаете то, что, по вашему мнению, получаете. – NickFitz

ответ

2

Вы должны удалить узел первым, прежде чем вы можете добавить его в другом месте. Один узел не может находиться в двух местах одновременно.

var node = flex.utils.get('oUpdater_About') 
node.parentNode.removeChild(node); 
flex.utils.get('oPopup_About').appendChild(node); 
+0

Привет, ребята, спасибо за вашу помощь! – jamesmhaley

+1

Вы серьезно? это дурацкое! вам не нужно делать это с помощью регулярных манипуляций с DOM. Содержит ли оболочка flex один и тот же код в IE по сравнению с другими браузерами под ним? – scunliffe

+0

@scunliffe: я не нашел подсказок, чтобы вы могли или не можете повторно добавить узел, который уже добавлен где-то в DOM. У вас есть источник, который может прояснить это для меня? –

1

убедитесь клонировать oUpdater_About (с node.cloneNode (правда)) таким образом вы получите копию и может повторно использовать РОМ фрагмент так часто, как вы хотите (в любом браузере)

+0

Я думаю, что вы, возможно, пропустили ту часть, где sparkyfield сказал, что хочет * переместить * элементы, а не * скопировать их. –

+0

Вот и все, что Джейсон, клонирование элемента будет означать, что я сталкиваюсь с идентификаторами и элементом. Мне нужен один элемент, который нужно перемещать, а не копировать. Спасибо – jamesmhaley

0

Это сообщение, как правило, предположить, что действительно существует проблема с AppendChild относительно этого:

http://metadeveloper.blogspot.com/2007/01/ie-7-appendchild-bug.html

вы пробовали клонировать его, удалив его, а затем вставить клон вместо этого?

Джеймс

+1

Да, это еще одна забавная игра в IE. Вы должны добавить TR в TBODY в IE. Попытка добавить их непосредственно к ТАБЛИЦЕ не удастся. – scunliffe

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