17 августа 2009, 20:42 более года назад
javascript: «Bug» with previousSibling
У нас есть вот такой список HTML тэгови т. д. , а обидно ;) ). Быстрый способ это вылечить, это написать весь HTML в одну строку, то есть убрать перенос, но это блин не выход ;)
Для этого можно написать «свой», «правильный» previousSibling, или, по желанию, модифицировать существующий, что, на моё мнение, будет излишним ;) Как всегда, залезем в прототип и дадимстране угля Обжектам, типа Нод Element (crossbrowser fix, thx Сергей Морозов), новую функцию
<label for="text">Enter text</label> <input name="text" type="text">Если вызвать функцию, от имени инпута, и потом попытаться повлиять на его previousSibling, которым по идее есть label, мы упрёмся в текстовую ноду (.style is undefined — у которой нету понятия стиль
Для этого можно написать «свой», «правильный» previousSibling, или, по желанию, модифицировать существующий, что, на моё мнение, будет излишним ;) Как всегда, залезем в прототип и дадим
Element.prototype.pSib = function() { var node = this; while (node = node.previousSibling) { // нам не нужен текст, йо ;) if (node.nodeType != 3) continue; } return node; } // использовать вот так var sometop = someid.pSib().style.top;