Ориентация по 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)) |
Это не решает проблему.
|
Копипастим? Взято, по-видимому, отсюда. Да еще и с ошибкой:
Цитата:
|
Цитата:
Цитата:
Во вторых с твоего сайта тоже списали, а код из книги Джона Рейсига |
Еще есть такая интересная штука ElementTraversal, правда область применения пока ограничена.
|
Ага, уже читал :)
|
Полный аналог приведёных мной функций
|
Цитата:
Цитата:
function( [B]elem[/B] ) { var [B]elem[/B] = this; P.S. Минут 15 гуглил эту книгу, поискать в ней код, никак не находилось, в результате нашел на javascript.ru :lol: |
Теперь если сделать эти функции методами элементов, то вообще шикарно будет. Как-то так: $('div1').first().next();
|
Цитата:
|
Цитата:
|
Ну ты ппц. Пустые узлы тоже типа 3. А он ходит только по типам 1
|
JSprog,
вообще-то B~Vladi прав твои функции выдают только теги (nodeType=1) нагора пустые и пробельный текстовые ноды(nodeType=3) пропускаются и это правильно обычные текстовые ноды(nodeType=3) с текстом каким-либо внутри также пропукаются, и это уже неправильно |
Так это функция для таких случаев и нужна! Когда нуны только теги
|
Riim,
Ну да, Octane же дал ссылку на свой хабрапост, там реализовано :) Так что вполне даже норм, для отхода от фреймворков :) UPD Gvozd, а так ли часто надо ползать по текстовым нодам? Честно говоря, я не вижу большой разницы между пустыми и непустыми текстовыми нодами. Если нужно получить ее -- так почему бы не использовать DOM-методы? А вариант реализации, о которой Вы говорите, видимо, есть тут |
есть хак: добавить на все элементы биндинг через стили, который будет добавлять каждому элементу необходимые методы...
|
Цитата:
|
То что их тоже обходит
|
Часовой пояс GMT +3, время: 15:54. |