Логин:

Пароль:

Форумы
Общие вопросы
Document Object Model
Обсуждаем конференцию
Web Usability (test)

Document Object Model

Приколы IE: клонировнаие и перестановка нодов.

1. Есть xml-документ, в котором есть ннод по имени item. К документу применяется xslt и результат выводится в броузер(document.write(xmldoc.transformNode(xsldoc));). Затем мы клонируем этот нод, заново прменяем тот же xsl и выводим в броузер. Прикол в том, что IE6 по непонятной прихоти обзывает клонированный нод не <item>...</item>, а <:item>...</:item>. При этом xsl-преобразования, применяющиеся к исходному <item> естественно не работают для его клона <:item>.
Забил на cloneNode() и написал свой для данного случая.

2. Писал 2 функции moveUp(id) и moveDown(id), которые перемещают item вверх и вниз в списке рядом стоящих братьев. Т.е., например, было:
<block>
<item id="1"/>
<item id="2"/>
<item id="3"/>
</block>

После вызова moveUp("2") должно стать:

<block>
<item id="2"/>
<item id="1"/>
<item id="3"/>
</block>

Вот эти ф-ии:

function moveUp(id)
{
.var myNode=xmldoc.selectSingleNode("descendant-or-self::*[@ID=\'" + id + "\']" ) ;.//находим нод по id
.myNode.parentNode.insertBefore(myNode,myNode.previousSibling); //ставим перед предыдущим
}

function moveDown(id)
{
.var myNode=xmldoc.selectSingleNode("descendant-or-self::*[@ID=\'" + id + "\']" ); //находим нод по id
.myNode.parentNode.insertBefore(myNode,myNode.nextSibling.nextSibling); //ставим после следующего за следующим
}

IMHO, это самый лобовой и логичный способ, который должен работать.
В результате ф-ии иногда работают правильно, а иногда нет.
Свойства previuosSibling и nextSibling у перемещаемого нода почему-то не обновляются после вызова insertBefore...

ВАШИ МЫСЛИ ПО ТЕМЕ?
Thanks in advance...
СообщениеАвторДата
MetaWizard04.07.2002 17:21
Gilmour04.07.2002 22:02