Навигация внутри DOM. Как это сделать нормально?
Вот такая вот задачка.
http://sneg-izdat.ru/test/ т.е. у нас есть поле 10 на 10 клеток (обычная таблица) кликаем по ячейке - она выделяется, далее кнопками "влево, вправо, вверх, вниз" можем перемещать "активный квадрат". По приведенной ссылке в фф худо-бедно работает. в ИЕ и опере, вверх/вниз перескакивает через строку. Методы, которые пришлось использовать - порой реально извращенные, как мне кажется, но ничего лучше не нашел. Кто может - подскажите как правильнее осуществлять навигацию внутри DOM? Данную задачу, конечно, можно решить с помощью установки ай-ди аля координатная сетка, но, ИМХО, это не способ решения проблемы. Это костыли. |
У элементов таблицы есть специальные коллекции:
table.tBodies[0].rows[0].cells[0] |
Спасибо за данные методы.
Но они будут работать только в случае с таблицей. Хотелось бы найти универсальные средства, которыми можно осуществлять навигацию в различных ситуациях. Например если нужно перемещаться между подобным образом сверстанными дивами. Есть ли какие-либо методы вроде previousSibling/nextSibling, через которые это можно реализовать? Либо не такие всеобъемлющие методы вроде AnyObj.childNode/AnyObj.children. Первая пара(previousSibling/nextSibling) мне не нравится тем, что внутри них как отдельные узлы воспринимаются не только какие-то теги, но и, судя по всему, толи пробелы, толи переносы строк в исходном коде. AnyObj.children вроде бы лишен таких пакостей, но из-за невозможности перейти к действительному соседнему узлу и обратится уже к его дочерним объектам - использование AnyObj.children не всегда возможно :(. Не знаю, понятно ли вообще что я хочу... Я хочу понять как можно переходить между соседними элементами родителя первоначального элемента, и вставать на ту же самую позицию среди дочерних элементов соседа родителя, где находится первоначальный элемент относительного своего родителя %)) Если вопрос не ясен, могу нарисовать схему. :) |
Цитата:
|
Если бы знал как написать... написал бы :)
Второй день только как занялся javascript и DOM... |
|
Цитата:
|
Цитата:
Ссылка Octane, конечно, интересна, но я бы тебе советовал ее на потом, когда разберешься, как без этого обойтись а без этого обойтись можно, как сказал e1f, как-то так function next( el ){ do { el = el.nextSibling; } while( el && el.nodeType != 1 ) return el; } |
Цитата:
Цитата:
Цитата:
|
но ты же сравниваешь (previousSibling/nextSibling vs AnyObj.childNode/AnyObj.children)? Или я тебя неправильно понял? В принципе следующий элемент можно и через parentNode.childNodes найти, если очень хочется, но не стоит
Цитата:
|
Часовой пояс GMT +3, время: 05:06. |