UPDATE:
Вот ссылка JsFiddle:
http://jsfiddle.net/zAVFv/
Кажется, он не работает в JsFiddle, но думаю, он служит для отображения всего кода - HTML, CSS и Js.
Я сталкиваюсь с очень странной ситуацией при редактировании DOM с использованием Javascript. Мой пример кода ниже. По сути, swapCells принимает два объекта, каждый из которых имеет 2 дочерних элемента: один является элементом img, а другой - textNode. Я хочу увидеть, как работает removeChild.
Я отметил две линии, откуда возникла путаница.
проблема # 1 находится на линии, где у sourceTD удален его дочерний элемент, проблема # 2 - когда lastChild удален из destinationTD.
Позвольте мне объяснить, как работает код ниже:
a) когда в коде присутствует только строка выпуска # 1, дочерний объект sourceTD удаляется, в выводе говорится, что у источника есть 1 дочерний тип img; у пункта назначения есть 2 ребенка - img и текст ---- работает как ожидалось
б) когда в коде присутствует только строка выпуска № 2, дочерний объект destinationTD удаляется, снова работает, как описано выше, как и ожидалось
в) СЕЙЧАС ПРОБЛЕМА - когда обе строки присутствуют в коде, он удаляет только исходный TD lastChild. вывод получен только для части предупреждений sourceTD. Предупреждения destinationTD не приходят, поэтому я не могу оценить, был ли удален дочерний объект
КОД:
function swapCells(sourceTD, destinationTD){
//line below is issue line#1
sourceTD.removeChild(sourceTD.lastChild);
//line below is issue line#2
destinationTD.removeChild(destinationTD.lastChild);
if(sourceTD.hasChildNodes()){
alert("Source has: " + sourceTD.childNodes.length);
alert(sourceTD.childNodes[0].alt);
alert(sourceTD.childNodes[1].nodeName);
}
destinationTD.removeChild(destinationTD.lastChild);
if(destinationTD.hasChildNodes()){
alert("Destination has: " + destinationTD.childNodes.length);
alert(destinationTD.childNodes[0].alt);
alert(destinationTD.childNodes[1].nodeName);
}
}
Пожалуйста, дайте мне знать, почему код работает неправильно, когда присутствуют обе строки проблемы. Кроме того, есть ли что-то вроде функции, которая может удалить только один узел, или что будет работать только один removeChild ... ????? Я в замешательстве.
Спасибо!