Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   Object #<HTMLTableRowElement> has no method 'swapNode' (https://javascript.ru/forum/dom-window/30124-object-htmltablerowelement-has-no-method-%27swapnode%27.html)

Atilla 24.07.2012 23:37

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?

Aetae 25.07.2012 03:36

Потому что и не должно быть. Только для осла.
Используйте insertBefore().


Часовой пояс GMT +3, время: 03:30.