Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 27.08.2009, 16:58
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Ориентация по DOM дереву.
Наверняка вам не раз было не удобно ориентироваться по DOM дереву с помощью методов ParentNode, PreviousSibling, FirstChild, LastChild, NextSibling из-за узлов - переводов строки то есть пустых строк.
Предлагаю вам модифицированы методы которые перемещаются только по узлам первого типа (XMl тэги)

previousSibling:
function prev(elem) {
 do{
  elem=elem.previousSibling;
 } while ( elem && elem.nodeType !=1);
 return elem;
}

nextSibling:
function next(elem) {
 do{
  elem=elem.nextSibling;
 } while (elem && elem.nodeType !=1);
 return elem;
 }

firstchild:
function first(elem) {
 elem=elem.firstChild;
 return elem && elem.nodeType!=1 ? next (elem) :elem;
}

lastchild:
function last(elem) {
 elem=elem.lastChild;
 return elem && elem.nodeType!=1 ? prev (elem) :elem;
}

И наконец parentNode. Можно указать количество родительских узлов на которое нужно подняться во втором аргументе.
function parent(elem, num) {
 num = num || 1;
 for (var i=0; i < num; i++)
 if ( elem != null ) elem = elem.parentNode;
 return elem;
}

Например чтобы переместиться ко второму элементу body надо написать
next(first(document.body))
__________________
Лови позитив

Последний раз редактировалось JSprog, 27.08.2009 в 17:49.
Ответить с цитированием
  #2 (permalink)  
Старый 27.08.2009, 17:30
Аватар для B~Vladi
Модератор Всея Форума
Отправить личное сообщение для B~Vladi Посмотреть профиль Найти все сообщения от B~Vladi
 
Регистрация: 14.05.2009
Сообщений: 4,021

Это не решает проблему.
Ответить с цитированием
  #3 (permalink)  
Старый 27.08.2009, 17:46
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Копипастим? Взято, по-видимому, отсюда. Да еще и с ошибкой:
Сообщение от JSprog Посмотреть сообщение
if (elem != null) elem=elemParentNode;
Ответить с цитированием
  #4 (permalink)  
Старый 27.08.2009, 17:50
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Сообщение от B~Vladi
Это не решает проблему.
Какую?
Сообщение от e1f
Копипастим? Взято, по-видимому, отсюда. Да еще и с ошибкой:
Во первых я не говорил что эт мой код просто показать захотел.
Во вторых с твоего сайта тоже списали, а код из книги Джона Рейсига
__________________
Лови позитив
Ответить с цитированием
  #5 (permalink)  
Старый 27.08.2009, 18:09
Отправить личное сообщение для Octane Посмотреть профиль Найти все сообщения от Octane  
Регистрация: 10.07.2008
Сообщений: 3,873

Еще есть такая интересная штука ElementTraversal, правда область применения пока ограничена.
Ответить с цитированием
  #6 (permalink)  
Старый 27.08.2009, 18:20
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Ага, уже читал
Ответить с цитированием
  #7 (permalink)  
Старый 27.08.2009, 19:09
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Полный аналог приведёных мной функций
__________________
Лови позитив
Ответить с цитированием
  #8 (permalink)  
Старый 27.08.2009, 19:10
Аватар для e1f
e1f e1f вне форума
Профессор
Отправить личное сообщение для e1f Посмотреть профиль Найти все сообщения от e1f
 
Регистрация: 03.04.2009
Сообщений: 1,263

Сообщение от JSprog Посмотреть сообщение
Во первых я не говорил что эт мой код просто показать захотел.
Так укажи, откуда, а не просто копипасти
Сообщение от JSprog Посмотреть сообщение
Во вторых с твоего сайта тоже списали, а код из книги Джона Рейсига
Ну, сайт не мой А код действительно, слизан + те фанки, которые в книге по аналогии отсутствуют, автор немного криво дописал:
function( [B]elem[/B] ) {
       var [B]elem[/B] = this;


P.S. Минут 15 гуглил эту книгу, поискать в ней код, никак не находилось, в результате нашел на javascript.ru
Ответить с цитированием
  #9 (permalink)  
Старый 27.08.2009, 23:59
Аватар для Riim
Рассеянный профессор
Отправить личное сообщение для Riim Посмотреть профиль Найти все сообщения от Riim
 
Регистрация: 06.04.2009
Сообщений: 2,379

Теперь если сделать эти функции методами элементов, то вообще шикарно будет. Как-то так: $('div1').first().next();
Ответить с цитированием
  #10 (permalink)  
Старый 28.08.2009, 08:36
Аватар для JSprog
L
Отправить личное сообщение для JSprog Посмотреть профиль Найти все сообщения от JSprog
 
Регистрация: 16.08.2009
Сообщений: 416

Сообщение от e1f
автор немного криво дописал:

function( elem ) {
var elem = this;
Там такое тоже было с помощью HTMLElement но в IE не пашет
__________________
Лови позитив
Ответить с цитированием
Ответ


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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Обращение к layer в DOM Asd Элементы интерфейса 2 01.07.2009 23:16
Работа с DOM на стороне сервера AlexAndreev Серверные языки и технологии 7 27.05.2009 21:39
управление DOM из FLASH Device Events/DOM/Window 2 30.04.2009 13:15
Сохранение дерева DOM в файл Александр1985 Общие вопросы Javascript 7 24.01.2009 23:15
Dom и события кнопок Гость Events/DOM/Window 4 07.08.2008 18:53