Скрипт должен менять местами строки (<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?