Great Rash
Expert-
Posts
7,974 -
Joined
-
Last visited
-
Days Won
144
Content Type
Profiles
Forums
Calendar
Store
Everything posted by Great Rash
-
display:none != ...style.display='none'. В чем дело?
Great Rash replied to tt48's question in JavaScript
Дело в том, что div.style.display = 'none'; эквивалентно вот такой записи в HTML - <div style="display: none;">. Я обычно делаю так: if (obj.style.display == 'none' || !obj.style.display) { obj.style.display='block'; } else { obj.style.display='none'; } Но можно и поиграться с getComputedStyle. -
Сохраните в UTF-8 без BOM.
-
А еще на странице может висеть однопиксельный <iframe>, проверьте-ка нет ли его в коде?
-
Начальник на работе, глядя на страничку, выдал: "Не, ну поиграйся со шрифтами, а то это как-то не вебдванольно". Выпал в осадок . Делюсь.
-
Эх времени совсем нет.
-
«getelementsbyclassname javascript» в Google.
-
Что-то ссылку обрезало, запихни в тег url
-
О! Спасибо!
-
Ну да можно, но хотелось бы не зависеть от того в каком виде приходят ссылки. Ведь наверняка их будет присылать тоже скрипт, только серверный.
-
Не, таким макаром ты просто в i-той ссылке изменишь текст. Т. е. если, допустим, вторая ссылка была такая: <a href="#">Контакты</a> то она станет такая: <a href="#">Контакты 1</a> Тут же не в номерах дело, а в конкретных ссылках.
-
В общем я придумал тупо циклом бежать с конца вот так: for (var i = lnk.length - 1; i >= 0; i--) { head.appendChild(lnk[i]); } Только ссылки у меня тогда вставляются наоборот. Это не принципиально, т.к. все равно они рандомно будут раскиданы на странице, но хотелось бы понять нет ли способа развернуть этот массив (т.е. "живой список")? Пробовал писать lnk.reverse(); но такая запись не работает, т.к. lnk это не массив, а объект... Я точно не знаю, но знаю, что getElementsByTagName('a'); вернет не массив, а объект (это видно если вывести тип переменной алертом - var lnk = getElementsByTagName('a'); alert(typeof lnk);). Т.е. это не набор нод будет, а набор ссылок на них в DOM'е.
-
2s0rr0w: 1) не понял почему ноды переставляются в конец? 2) но мне же надо назначить каждой ссылке свои координаты, чтобы раскидать их рандомно в пределах элемента, как же тут обойтись без цикла? 3) в принципе можно сперва вставить все скопом, а потом бежать по ним циклом, но тогда вопрос как вставить все ссылки сразу? 2psywalker: во-первых, я изменил функцию (неправильно сперва написал), проверь мой пост еще раз во-вторых я не тестировал, писал так - на память, может и правда не сработает, ща попробую с твоей тестовой страницей повозиться.
-
Небольшая, но очень интересная задачка по верстке.
Great Rash replied to Great Rash's question in HTML Coding
ИМХО плох тот верстальщик, который не мечтает стать программистом. psywalker, mishka2, из вас отличная б команда получилась -
А собственно зачем? А вообще можно изменить функцию, добавив туда еще параметр: function getBounds(obj, endElem) { var x = 0; var y = 0; var prnt = obj; var end = endElem ? endElem : document.body.parentNode; while (prnt && prnt != end) { x += prnt.offsetLeft; y += prnt.offsetTop; prnt = prnt.offsetParent; } var x1 = x + obj.offsetWidth; var y1 = y + obj.offsetHeight; return {'x0': x, 'y0': y, 'x1': x1, 'y1': y1, 'w': obj.offsetWidth, 'h': obj.offsetHeight} } Если endElem будет указан, то позиция элемента буден находится только в пределах указанной ноды, если не указать endElem, то позиция элемента будет искаться в пределах документа. UPD: чутка изменил, вместо document.body.parentNode можно написать document.firstChild.nextSibling, уж не знаю как правильней. А может вообще есть иной способ добраться до ноды <html>
-
Небольшая, но очень интересная задачка по верстке.
Great Rash replied to Great Rash's question in HTML Coding
Хе-хе, 40k и с 9:00 до 18:00 (или с 10:00 до 19:00 по выбору). Требования - верстка и яваскрипт. UPD: чет я ща подумал, что теперь я могу претендовать еще и на должность в отделе кадров -
Небольшая, но очень интересная задачка по верстке.
Great Rash replied to Great Rash's question in HTML Coding
Вот я ща скажу куда, а вы уже зная ответы на все вопросы возьмете и устроитесь туда вместо меня Ладно, я не жадный - РБК. http://www.rbc.ru/ - главная у них, кстати, отстойная...код ужасает и доктайпа нет (а на собеседовании они меня задолбали вопросами про W3C и доктайпы) Всем спасибо за решения, в общем если пораскинуть мозгами - ничего сложного нет, проблема в том, что на собеседовании че-то все из головы вылетает и поэкспериментировать нет возможности. Все пишешь на листочке. -
Да. По этому и нужен цикл, чтобы эту ситуацию предусмотреть. 2s0rr0w: У меня тут проблемка возникла, не понимаю почему так происходит. Есть вот такой код: <?xml version="1.0" encoding="utf-8"?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en"> <head> <title>Фильтр</title> <meta http-equiv="content-type" content="text/html;charset=utf-8" /> <meta http-equiv="Content-Style-Type" content="text/css" /> <style type="text/css"> * { margin: 0; padding: 0; font: 11px "Trebuchet MS", Verdana, Tahoma, sans-serif; } body { margin: 10px; } #header { position: relative; height: 98px; border: 1px solid; } </style> <script type="text/javascript"> function test() { var cont = document.getElementById('links'); var head = document.getElementById('header'); var lnk = cont.getElementsByTagName('a'); cont.parentNode.removeChild(cont); for (var i = 0; i < lnk.length; i++) { head.appendChild(lnk[i]); } } function getBounds(obj) { var x = 0; var y = 0; var prnt = obj; while (prnt) { x += prnt.offsetLeft; y += prnt.offsetTop; prnt = prnt.offsetParent; } var x1 = x + obj.offsetWidth; var y1 = y + obj.offsetHeight; return {'x0': x, 'y0': y, 'x1': x1, 'y1': y1, 'w': obj.offsetWidth, 'h': obj.offsetHeight} } window.onload = function() { test(); } </script> </head> <body> <div id="links"> <a href="#">link 1</a> <a href="#">link 2</a> <a href="#">link 3</a> <a href="#">link 4</a> <a href="#">link 5</a> <a href="#">link 6</a> <a href="#">link 7</a> <a href="#">link 8</a> <a href="#">link 9</a> <a href="#">link 10</a> <a href="#">link 11</a> <a href="#">link 12</a> <a href="#">link 13</a> </div> <div id="header"> </div> </body> </html> Вопрос: почему ссылки вставляются через одну? Т.е. link 1, link 3, link 5 и т.д. Совсем не понимаю почему так происходит.
-
Ну тогда можно просто: while (prnt) { тра-ля-ля }
-
Нас интересует не высота родителя, а офсет. Т.е. offsetParent дает нам смещение потомка относительно родителя. Попробуй заменить в моем коде offsetParent, на parentNode и ты увидишь, что координата элемента будет находится неверно.
-
Ага! Кто там в гугль всех отправляет? https://developer.mozilla.org/en/DOM/element.offsetParent Грубо говоря, это тоже самое, что parentNode только с учетом офсета.
-
Перевожу с компьютерного на русский: пока есть парент и парент не равен <body>. Т.е. мы в цикле бежим от элемента вверх по его родителям пока не доберемся до боди (мало ли какая вложенность может быть у элементов) и складываем офсеты всех этих элементов, чтобы узнать где на странице стоит нужный нам элемент.
-
Продолжаю. Теперь надо написать функцию которая нам будет возвращать габариты объекта. Я тут написал более-менее универсальную (она конечно требует доработок, но пока и такая сойдет): function getBounds(obj) { var x = 0; var y = 0; var prnt = obj; while (prnt && prnt.nodeName.toLowerCase() != 'body') { x += prnt.offsetLeft; y += prnt.offsetTop; prnt = prnt.offsetParent; } var x1 = x + obj.offsetWidth; var y1 = y + obj.offsetHeight; return {'x0': x, 'y0': y, 'x1': x1, 'y1': y1, 'w': obj.offsetWidth, 'h': obj.offsetHeight} } // использовать так alert('x0=' + getBounds(links[0]).x0 + '\ny0=' + getBounds(links[0]).y0); // выдаст координаты верхнего левого угла элемента links[0] для примера взял, выдаст нули, т.к. нода удалена и на странице ее нет пока.
-
Да, все ноды теперь сохранены в массиве, причем сохранены со всеми своими параметрами (классы, урлы, содержимое и т.п.). Т.е. links - это у нас массив объектов. А объекты эти являются в данном случае ссылками. По этому контейнер с ссылками нам больше не нужен и его можно спокойно удалять.
-
Я его не создавал, предполагается, что этот контейнер со ссылками нам выдает сервер в лице CMS. А убил я его потому что на странице видеть этот контейнер нам (да и юзеру) совершенно не обязательно. А ссылки все у нас теперь хранятся в массиве links.