Ориентация по 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, время: 23:35. |