Отправляет email-рассылки с помощью сервиса Sendsay
  Все выпуски  

Веб-разработка? Это просто! Еще пара трюков


DOM: вытаскиваем текст вне тегов

Данная публикация открывает новую рубрику в блоге. Рубрика называется "Кратко". В ней я буду публиковать совсем кратенькие статьи - рецепты, темы для которых чаще всего буду брать из статистики поискового трафика. То есть, если я вижу, что человек пришел на мой сайт по некоему запросу, и ответа на вопрос на моем сайте нет, то я буду писать на них ответы и может когда-нибудь мой ответ пригодится.

Анализируя поисковый трафик, я обнаружил вопрос "вытащить текст вне тегов", делюсь рецептом. Собственно, каждая ситуация уникальна, но в общем случае, нужно отыскать в DOM-структуре некий строго определенный элемент и уже относительно него отыскать нужный нам текст.

В нашем случае документ представляет собой два дива с заданными строго идентификаторами, между которыми расположен искомый текстовый элемент. При помощи getElementById мы на ходим элемент div1, а затем при помощи nextSibling добираемся до текстового узла, ведь он стоит следующим в DOM-структуре. Получить его значение можно при помощи свойства nodeValue.

Вот и весь рецепт.

<html>
<head>
<title>Hello!</title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type="text/javascript">
function getText()
{
var div1 = document.getElementById("div1");
div1.nextSibling.nodeValue = "Поменял текст";
}
</script>
</head>
<body>
<div id="div1">Предшествующий блок</div>
Это текст я хочу получить
<div id="div2">Замыкающий блок</div>
<input type="button" value="Start!" onclick="getText()">
</body>
</html>

DIV всплывающий поверх flash-баннера

В процессе создания сайтов, столкнулся однажды с проблемой выражаемой в том, что flash-баннер, размещенный на странице, закрывает собой всплывающий DIV содержащий в себе меню навигации.

Сам этот DIV имеет z-index больше нуля, и когда на странице нет никакой Flash-анимации, этот DIV плавает поверх страницы. Однако, как только появляется Flash-баннер, то баннер этот рендерится поверх любых плавающих DIV-ов.

Как и все гениальное, решение оказалось простым. Достаточно тегам OBJECT и EMBED добавить атрибут wmode со значение opaque.

Выглядеть это должно как-то так:

<OBJECT wmode="opaque" ...>
<EMBED ...>
<PARAM name="wmode" value="opaque">
</EMBED>
</OBJECT>

А связано это с тем, что по умолчанию, параметр этот принимает значение window, а это говорит браузеру, что флешку необходимо отрисовывать поверх страницы и всего, что на ней находится. Другие значения параметра wmode - opaque и transparent. Последний ко всему прочему позволяет задавать прозрачный фон для DIV'а, отображаемого поверх флешки. Учтите, что подобные игры с прозрачностью могут заметно ухудшать производительность работы браузера.





В избранное