Показать сообщение отдельно
  #1 (permalink)  
Старый 24.07.2012, 23:37
Интересующийся
Отправить личное сообщение для Atilla Посмотреть профиль Найти все сообщения от Atilla
 
Регистрация: 28.06.2009
Сообщений: 21

Object #<HTMLTableRowElement> has no method 'swapNode'
Скрипт должен менять местами строки (<tr>) таблицы методом drag-and-drop.

javascript:
var mouseStatus=false
var navigation
var number
var elementForReplace

window.onload = function () {
	navigation = document.getElementsByClassName("navigation")[0].getElementsByTagName("tbody")[0]
	number = parseInt ( navigation.lastChild.getElementsByTagName("td")[0].innerHTML ) + 1
	
	for ( i = 1; i < number; i++ ) {
		navigation.getElementsByTagName("tr")[i].getElementsByTagName("td")[0].addEventListener('mousedown', mouseDown, false)
		navigation.getElementsByTagName("tr")[i].getElementsByTagName("td")[0].addEventListener('mousemove', move, false)
		navigation.getElementsByTagName("tr")[i].getElementsByTagName("td")[0].addEventListener('mouseup', mouseUp, false)
	}
}

/***** Перетаскивание пунктов меню *****/
function mouseDown (event) {
	mouseStatus = true
	elementForReplace = event.currentTarget.parentNode
	event.preventDefault()
}

function move (event) {
	if (mouseStatus & event.currentTarget.parentNode!=elementForReplace) {
		event.currentTarget.parentNode.swapNode (elementForReplace)
	}
	event.preventDefault()
}

function mouseUp (event) {
	mouseStatus = false
}


HTML:
<table class="navigation">
	<tbody>
		<tr>
			<th>..</th>
			<th>..</th>
			<th>..</th>
		</tr>

		<tr>
			<td>...</td>   <!-- Ячейка, которая следит за  mousedown, mousemove и mouseup-->
			<td>...</td>
			<td>...</td>
		</tr>

		<tr>
			<td>...</td>  <!-- Ячейка, которая следит за  mousedown, mousemove и mouseup-->
			<td>...</td>
			<td>...</td>
		</tr>

		...
	</tbody>
</table>


Захват событий происходит только в первой ячейке каждой строки.

Ошибку выдаёт на
event.currentTarget.parentNode.swapNode (elementForReplace)

внутри функции move ()

Этот кусок кода должн менять местами строку, по которой mousedown (elementForReplace), со строкой, на которую mousemove (event.currentTarget.parentNode).

Собственно говоря мне не понятна ошибка.
Почему у <tr> нет метода swapNode?
Ответить с цитированием