Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 08.04.2010, 17:13
Аспирант
Отправить личное сообщение для master_alf Посмотреть профиль Найти все сообщения от master_alf
 
Регистрация: 08.04.2010
Сообщений: 34

Навигация внутри DOM. Как это сделать нормально?
Вот такая вот задачка.
http://sneg-izdat.ru/test/
т.е. у нас есть поле 10 на 10 клеток (обычная таблица)
кликаем по ячейке - она выделяется, далее кнопками "влево, вправо, вверх, вниз" можем перемещать "активный квадрат".

По приведенной ссылке в фф худо-бедно работает.
в ИЕ и опере, вверх/вниз перескакивает через строку.
Методы, которые пришлось использовать - порой реально извращенные, как мне кажется, но ничего лучше не нашел.
Кто может - подскажите как правильнее осуществлять навигацию внутри DOM? Данную задачу, конечно, можно решить с помощью установки ай-ди аля координатная сетка, но, ИМХО, это не способ решения проблемы. Это костыли.
Ответить с цитированием
  #2 (permalink)  
Старый 08.04.2010, 17:51
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

У элементов таблицы есть специальные коллекции:
table.tBodies[0].rows[0].cells[0]
Ответить с цитированием
  #3 (permalink)  
Старый 08.04.2010, 18:57
Аспирант
Отправить личное сообщение для master_alf Посмотреть профиль Найти все сообщения от master_alf
 
Регистрация: 08.04.2010
Сообщений: 34

Спасибо за данные методы.
Но они будут работать только в случае с таблицей.
Хотелось бы найти универсальные средства, которыми можно осуществлять навигацию в различных ситуациях.
Например если нужно перемещаться между подобным образом сверстанными дивами.
Есть ли какие-либо методы вроде previousSibling/nextSibling, через которые это можно реализовать? Либо не такие всеобъемлющие методы вроде AnyObj.childNode/AnyObj.children.
Первая пара(previousSibling/nextSibling) мне не нравится тем, что внутри них как отдельные узлы воспринимаются не только какие-то теги, но и, судя по всему, толи пробелы, толи переносы строк в исходном коде.

AnyObj.children вроде бы лишен таких пакостей, но из-за невозможности перейти к действительному соседнему узлу и обратится уже к его дочерним объектам - использование AnyObj.children не всегда возможно .

Не знаю, понятно ли вообще что я хочу...
Я хочу понять как можно переходить между соседними элементами родителя первоначального элемента, и вставать на ту же самую позицию среди дочерних элементов соседа родителя, где находится первоначальный элемент относительного своего родителя %))
Если вопрос не ясен, могу нарисовать схему.
Ответить с цитированием
  #4 (permalink)  
Старый 08.04.2010, 19:21
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Цитата:
Первая пара(previousSibling/nextSibling) мне не нравится тем, что внутри них как отдельные узлы воспринимаются не только какие-то теги, но и, судя по всему, толи пробелы, толи переносы строк в исходном коде.
master_alf, напишите свои prev/next, которые пропускают текстовые ноды. Или загуглите готовое решение, их наверняка over9000.
Ответить с цитированием
  #5 (permalink)  
Старый 08.04.2010, 20:27
Аспирант
Отправить личное сообщение для master_alf Посмотреть профиль Найти все сообщения от master_alf
 
Регистрация: 08.04.2010
Сообщений: 34

Если бы знал как написать... написал бы
Второй день только как занялся javascript и DOM...
Ответить с цитированием
  #6 (permalink)  
Старый 08.04.2010, 20:39
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

http://habrahabr.ru/blogs/javascript/54380/
Ответить с цитированием
  #7 (permalink)  
Старый 08.04.2010, 21:07
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Цитата:
Или загуглите готовое решение, их наверняка over9000
master_alf, ну, гуглом-то не второй день пользуетесь?
Ответить с цитированием
  #8 (permalink)  
Старый 09.04.2010, 00:17
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

Сообщение от master_alf
Спасибо за данные методы.
Но они будут работать только в случае с таблицей.
но твою текущую задачи они ведь решают? Хотя nextSibling/previousSibling удобнее в данном случае. В частности, удобнее childNodes. Потому что все эти rows, cells, childNodes - чтобы просмотреть список дочерних элементов, а тебе надо перейти к предыдущему/следующему. Да и вообще, тебе нужна универсальность? previous/nextSibling универсальнее, чем тебе надо, потому что учитывают текстовые узлы

Ссылка Octane, конечно, интересна, но я бы тебе советовал ее на потом, когда разберешься, как без этого обойтись

а без этого обойтись можно, как сказал e1f, как-то так
function next( el ){
    do {
        el = el.nextSibling;
    } while( el && el.nodeType != 1 )
    return el;
}
Ответить с цитированием
  #9 (permalink)  
Старый 09.04.2010, 09:52
Аспирант
Отправить личное сообщение для master_alf Посмотреть профиль Найти все сообщения от master_alf
 
Регистрация: 08.04.2010
Сообщений: 34

Сообщение от e1f
master_alf, ну, гуглом-то не второй день пользуетесь?
Не второй, но на форуме вопрос задал только после того, как порыскал по гуглу. К сожалению сам ничего найти путнего не смог.
Сообщение от x-yuri
но твою текущую задачи они ведь решают?
Да, решают. Но т.к. задача это для меня, а не для преподователя в институте, хотелось бы научиться навигации в принципе, а не применительно к конкретно этому примеру.
Сообщение от x-yuri
Хотя nextSibling/previousSibling удобнее в данном случае. В частности, удобнее childNodes.
Не совсем понял, это же методы разного уровня, в смысле nextSibling/previousSibling - позволяют перемещаться внутри текущего уровня между узлами. А childNodes - отдает список дочерних элементов узла. т.е. получается, мы в структуре дерева уходим вглубь. Это я к тому, что не пойму, как можно сравнивать методы prevSibling/nextSibling и childNotes.
Ответить с цитированием
  #10 (permalink)  
Старый 09.04.2010, 10:06
Аватар для x-yuri
Отправить личное сообщение для x-yuri Посмотреть профиль Найти все сообщения от x-yuri
 
Регистрация: 27.12.2008
Сообщений: 4,201

но ты же сравниваешь (previousSibling/nextSibling vs AnyObj.childNode/AnyObj.children)? Или я тебя неправильно понял? В принципе следующий элемент можно и через parentNode.childNodes найти, если очень хочется, но не стоит

Сообщение от master_alf
Да, решают. Но т.к. задача это для меня, а не для преподователя в институте, хотелось бы научиться навигации в принципе, а не применительно к конкретно этому примеру.
так спрашивать тогда надо "какие есть варианты навигации?", и не "как решить задачу?"
Ответить с цитированием
Ответ



Опции темы Искать в теме
Искать в теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
$('my').load(); Как сделать, чтобы это заработало mycoding Общие вопросы Javascript 25 02.10.2016 23:43
Решение проблемы кодировок для AJAX и PHP без iconv (cp1251 в AJAX) Serge Ageyev AJAX и COMET 10 24.04.2013 20:48
Подскажите как это сделать oxotnik Общие вопросы Javascript 11 19.01.2010 09:57
Как это сделать? PAMAC Общие вопросы Javascript 2 10.10.2009 21:02
Как сделать электронный каталог продукции? natarius Серверные языки и технологии 6 24.05.2009 20:56