CSS: дочерние селекторы. Контекстный CSS селектор


Влад Мержевич

Дочерним называется элемент, который непосредственно располагается внутри родительского элемента. Чтобы лучше понять отношения между элементами документа, разберём небольшой код (пример 12.1).

Пример 12.1. Вложенность элементов в документе

HTML5 CSS 2.1 IE Cr Op Sa Fx

Lorem ipsum

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.

Ut wisis enim ad minim veniam, quis nostrud exerci tution ullamcorper suscipit lobortis nisl ut aliquip ex ea commodo consequat.

В данном примере применяется несколько контейнеров, которые в коде располагаются один в другом. Нагляднее это видно на дереве элементов, так называется структура отношений тегов документа между собой (рис. 12.1).

Рис. 12.1. Дерево элементов для примера

На рис. 12.1 в удобном виде представлена вложенность элементов и их иерархия. Здесь дочерним элементом по отношению к тегу

выступает тег

Вместе с тем тег не является дочерним для тега

, поскольку он расположен в контейнере

Вернёмся теперь к селекторам. Дочерним селектором считается такой, который в дереве элементов находится прямо внутри родительского элемента. Синтаксис применения таких селекторов следующий.

Селектор 1 > Селектор 2 { Описание правил стиля }

Стиль применяется к Селектору 2, но только в том случае, если он является дочерним для Селектора 1.

Если снова обратиться к примеру 12.1, то стиль вида P > EM { color: red } будет установлен для первого абзаца документа, поскольку тег находится внутри контейнера

И не даст никакого результата для второго абзаца. А все из-за того, что тег во втором абзаце расположен в контейнере , поэтому нарушается условие вложенности.

По своей логике дочерние селекторы похожи на селекторы контекстные. Разница между ними следующая. Стиль к дочернему селектору применяется только в том случае, когда он является прямым потомком, иными словами, непосредственно располагается внутри родительского элемента. Для контекстного селектора же допустим любой уровень вложенности. Чтобы стало понятно, о чем идет речь, разберём следующий код (пример 12.2).

Пример 12.2. Контекстные и дочерние селекторы

HTML5 CSS 2.1 IE Cr Op Sa Fx

Дочерние селекторы

Lorem ipsum dolor sit amet, consectetuer adipiscing elit, sed diem nonummy nibh euismod tincidunt ut lacreet dolore magna aliguam erat volutpat.

Результат данного примера показан на рис. 12.2.

Рис. 12.2. Цвет текста, заданный с помощью дочернего селектора

На тег в примере действуют одновременно два правила: контекстный селектор (тег расположен внутри

) и дочерний селектор (тег является дочерним по отношению к

). При этом правила являются равносильными, поскольку все условия для них выполняются и не противоречат друг другу. В подобных случаях применяется стиль, который расположен в коде ниже, поэтому курсивный текст отображается красным цветом. Стоит поменять правила местами и поставить DIV I ниже, как цвет текста изменится с красного на зеленый.

Заметим, что в большинстве случаев от добавления дочерних селекторов можно отказаться, заменив их контекстными селекторами. Однако использование дочерних селекторов расширяет возможности по управлению стилями элементов, что в итоге позволяет получить нужный результат, а также простой и наглядный код.

Удобнее всего применять указанные селекторы для элементов, которые обладают иерархической структурой — сюда относятся, например, таблицы и разные списки. В примере 12.3 показано изменение вида списка с помощью стилей. За счёт вложения одного списка в другой получаем разновидность меню. Заголовки при этом располагаются горизонтально, а набор ссылок — вертикально под заголовками (рис. 12.3).

Рис. 12.3. Список в виде меню

Для размещения текста по горизонтали к селектору LI добавляется стилевое свойство float . Чтобы при этом разделить между собой стиль горизонтального и вертикального списка и применяются дочерние селекторы (пример 12.3).

Пример 12.3. Использование дочерних селекторов

HTML5 CSS 2.1 IE Cr Op Sa Fx

Дочерние селекторы

В данном примере дочерние селекторы требуются, чтобы разделить стиль элементов списка верхнего уровня и вложенные списки, которые выполняют разные задачи, поэтому стиль для них не должен пересекаться.

Вопросы для проверки

1. Какой цвет будет у жирного курсивного текста в коде

Нормы освещённости построены на основе классификации зрительных работ по определенным количественным признакам.

При использовании следующего стиля?

P { color: green; }
B {color: blue; }
I {color: orange; }
B > I { color: olive; }
P > I { color: yellow; }

  1. Зелёный.
  2. Синий.
  3. Оранжевый.
  4. Оливковый.
  5. Жёлтый.

2. Какой элемент является родительским для тега ? </b></p> <ol><li><HEAD></li> <li><BODY></li> <li><HTML></li> <li><META></li> <li><!DOCTYPE></li> </ol><p><b>3. Для какого тега элемент <!DOCTYPE> выступает родителем? </b></p> <ol><li><HTML></li> <li><TITLE></li> <li><BODY></li> <li><HEAD></li> <li>Ни для одного тега.</li> </ol><h2>Ответы</h2> <p>1. Оливковый.</p> <p>3. Ни для одного тега.</p> <p>Тег <!DOCTYPE> отвечает за тип документа в HTML (DTD "document type definition", описание типа документа). Если быть точнее, то это инструкция для браузера, что за тип документа представлен ниже.</p> <p>Возникает <a href="/apt-get-upravlenie-paketami-v-ubuntu-voznikaet-logichnyi-vopros-zachem-nuzhen/">логичный вопрос</a>: а что html разве бывает разный? Дело в том, что в разных <a href="/avtor-pervonachalnoi-versii-html-http-web-html-istoriya-razvitiya-yazyka/">версиях html</a> появлялись новые теги. Также и в CSS появлялись новые свойства. Чтобы браузер корректно смог понять какому стандарту соответствует страница, рекомендуется четко указывать тип документа в <!DOCTYPE> .</p> <p>Располагается <!DOCTYPE> в самом начале html-кода (перед тегом <html> ).</p> <p>Синтаксис <!DOCTYPE> </p> <blockquote><!DOCTYPE [<span>Элемент верхнего уровня </span>] [Публичность ] "[Регистрация ]//[Организация ]//[Тип ] [Имя ]//[Язык ]" ""> <html > ... </blockquote> <ul><li><span>Элемент верхнего уровня </span> - элемент верхнего уровня в документе (для HTML это тег <html> )</li> <li>Публичность - значение PUBLIC (объект является публичным) или SYSTEM (<a href="/kak-pravilno-ochistit-pamyat-na-androide-kak-ochistit-vnutrennyuyu/">системным ресурсом</a>). Например, таким как <a href="/kak-otkryt-dostup-na-kompyutere-podklyuchenie-obshchego-dostupa-k-failam-sozdanie/">локальный файл</a>. Для HTML/XHTML указывается значение PUBLIC.</li> <li>Регистрация - принимает одно из двух значений: плюс (+) - разработчик зарегистрирован в ISO и минус (-) - разработчик не зарегистрирован. Для W3C значение ставится минус.</li> <li>Организация - уникальное название организации, разработавшей DTD. Официально HTML/XHTML публикует W3C, это название и пишется в <!DOCTYPE> .</li> <li>Тип - тип описываемого документа (для HTML/XHTML значение DTD).</li> <li>Имя - уникальное имя документа для описания DTD.</li> <li>Язык - язык, на котором написан текст для описания объекта. Содержит две буквы, пишется в верхнем регистре. Например, EN.</li> <li>URL - адрес документа с DTD.</li> </ul><p>Рассмотрим какие стандартные значения встречаются чаще всего.</p> <h2>Таблица со значениями <!DOCTYPE> и описания к ним</h2> <table width="100%" cellpadding="2" cellspacing="0" border="1" bordercolor="#888" style="border-collapse: collapse"><tr style="font-size:15px;font-weight:bold"><td>DOCTYPE </td> <td>Описание </td> </tr><tr><td><span><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> </span> </td> <td>Строгий синтаксис HTML </td> </tr><tr><td><span><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> </span> </td> <td>Переходный синтаксис HTML </td> </tr><tr><td><span><!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Frameset//EN" "http://www.w3.org/TR/html4/frameset.dtd"> </span> </td> <td>В HTML-документе применяются фреймы </td> </tr><tr><td><!DOCTYPE html> </td> <td>Стандарт HTML5. Для всех документов. Рекомендуется использовать его на своих сайтах. </td> </tr><tr><td><span><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"> </span> </td> <td>Строгий синтаксис XHTML. Включает все HTML элементы и атрибуты, кроме устаревших презентационных. Фреймсеты также не разрешены. </td> </tr><tr><td><span><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> </span> </td> <td>Переходный синтаксис XHTML. Включает все HTML элементы и атрибуты, вместе с устаревшими презентационными. Фреймсеты не разрешены. </td> </tr><tr><td><span><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd"> </span> </td> <td>Тоже что и XHTML 1.0 Transitional, но разрешает фреймы. </td> </tr><tr><td><span><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd"> </span> </td> <td>Тоже что и XHTML 1.0 Strict, но разрешает добавление модулей. </td> </tr></table><h2>Какой <!DOCTYPE> выбрать</h2> <p>Подводя итоги можно сказать, что <!DOCTYPE> не является <a href="/obyazatelnye-neobyazatelnye-i-nedopustimye-elementy-vozmozhny/">обязательным элементом</a>, но его использование снижает риски возникновения проблем с отображением html-страницы в разных браузерах.</p> <p>Фактически всем подойдет следующий вариант:</p> <blockquote><!DOCTYPE html > <html > ... </blockquote> <p>Сегодня приступим к <a href="/informatika-elementy-html-tegi-iii-izuchenie-novogo-materiala/">изучению html</a> и css. Данную тему я постараюсь раскрыть максимально понятно, для любого читателя. И не имеет значения: знакомы вы с этой темой или только имеете желание изучить код, который довольно широко используется в сайтостроении. И чтобы затронуть, как можно <a href="/primery-oformleniya-bolshih-proektov-fpga-o-dokumentirovanii-proektov-dlya-plis-chto/">больше примеров</a> применения и использования кода, я планирую написать весьма внушительный список статей, посвященных , без использования, каких либо cms, или же комбинируя html-странички с движками dle и wordpress. Разбирать вопросы мы будем по мере их поступления, а не в традиционном стиле, сначала теория, а потом практика. Я сразу покажу все на практике, подкрепляя все теорией.</p> <p>Но начнем, конечно же, сначала. То есть с того, что такое html? И другого немаловажного вопроса: «Зачем нужен doctype и какой выбрать?» Собственно, это и тема, сегодняшнего поста.</p> <h3>Что такое html?</h3> <p>Html — это аббревиатура языка разметки гипертекста: «HyperText Markup Language», которая определяет расположение элементов на веб-странице и их оформление. <a href="/perl-yazyk-programmirovaniya-samouchitel-tipy-dannyh-v-perl-upakovka/">Данный язык</a> никак не ограничивает вебмастера, в его фантазии и позволяет создавать практически любую структуру и оформление страницы. Вообщем, если вы решили посвятить себя созданию сайтов, вы должны обязательно знать html-код. Сложного в нем ничего нет, и я надеюсь, что по итогам цикла статей, вы в этом убедитесь.</p> <p>Любой код веб-сайта начинается с определения типа документа (DTD — document type definition(описание типа документа)) браузерами, для корректного отображения сайта на экранах наших мониторов. А чтобы помочь браузеру определиться, необходимо указать тип документа, который используется на сайте. Для этого, существует тег <DOCTYPE>. Для чего нужно указывать тип документа? Нужно это, потому что html существует в нескольких версиях языка. И кроме того, существует расширенный язык разметки (XHTML — Extensible Hypertext Markup Language), который отличается от html синтаксисом. И если этого не делать, веб-браузер может «запутаться» и не корректно отобразить нашу страницу. Поэтому, мы рассмотрим какие бывают типы документа. Ниже, я предложу табличку с разновидностями основных типов документов — <DOCTYPE>:</p> <table class="stat"><tbody><tr><td><b>DOCTYPE </b> </td> <td><b>Описание </b> </td> </tr><tr><td class="zag" colspan="2"><b>HTML 4.01 </b> </td> </tr><tr><td><!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.01//EN» «http://www.w3.org/TR/html4/strict.dtd»> </td> <td>Строгий синтаксис HTML. </td> </tr><tr><td><!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.01 Transitional//EN» «http://www.w3.org/TR/html4/loose.dtd»> </td> <td>Переходный синтаксис HTML. </td> </tr><tr><td><!DOCTYPE HTML PUBLIC «-//W3C//DTD HTML 4.01 Frameset//EN» «http://www.w3.org/TR/html4/frameset.dtd»> </td> <td>HTML-документ, с применением фреймов. </td> </tr><tr><td class="zag" colspan="2"><b>HTML 5 </b> </td> </tr><tr><td><!DOCTYPE html> </td> <td>Для всех документов. </td> </tr><tr><td class="zag" colspan="2"><b>XHTML 1.0 </b> </td> </tr><tr><td><!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Strict//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd»> </td> <td>Строгий синтаксис XHTML. </td> </tr><tr><td><!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Transitional//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd»> </td> <td>Переходный синтаксис XHTML. </td> </tr><tr><td><!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.0 Frameset//EN» «http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd»> </td> <td>XHTML-документ, с применением фреймов. </td> </tr><tr><td class="zag" colspan="2"><b>XHTML 1.1 </b> </td> </tr><tr><td><!DOCTYPE html PUBLIC «-//W3C//DTD XHTML 1.1//EN» «http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd»> </td> <td>Такой же, как и строгий синтаксис XHTML, но допускается добавление модулей. </td> </tr></tbody></table><p>Теперь, попробуем разобрать по кусочками, что же содержит DOCTYPE.<br> html — указывает элемент верхнего уровня, то есть самую основу кода. Для HTML, это тег <html>.</p> <p>PUBLIC — определяет публичность документа. <a href="/referat-baza-dannyh-ponyatie-bazy-dannyh-vidy-baz-dannyh/">Данный тип</a> документа является публичным.</p> <p>«-» — указывает, зарегистрирован или нет разработчик типа документа в международной организации по стандартизации (International Organization for Standardization, ISO). Имеет два значения: минус или плюс. Минус — не зарегистрирован. Плюс — зарегистрирован. Но для W3C, указывается «-»</p> <p>W3C — организация разработавшая DTD.</p> <p>DTD — тип документа. Для HTML и XHTML указывается DTD.</p> <p>HTML 4.01 Transitional (как пример) — имя документа, его версия и синтаксис, который он использует.</p> <p>EN — язык на котором написан документ. И естественно, HTML и XHTML используют английский язык.</p> <p>http://www.w3.org/TR/html4/loose.dtd — адрес документа с описанием документа (DTD).</p> <p>Вот столько информации несет в себе самая первая <a href="/s-novoi-stroki-html-razryv-stroki-v-html-ispolzuem-teg-br/">строка HTML</a> или XHTML кода. Но все же могут возникнуть проблемы с определением насколько соответствует наш документ выбранному синтаксису или нет. Для этого, существует валидатор разметки, который поможет нам определить на сколько валиден (правильный) наш код. Валидатор предоставляется той же организацией. которая является официальным разработчиком DTD. Находится он на сайте http://validator.w3.org/ .</p> <p>Итак, нам остается только определиться с выбором. И выбрать <DOCTYPE> для нашего документа. Здесь каждый должен выбирать сам отталкиваясь от той информации, которую мы сегодня изучили. Вот такой получился вступительный, теоретический пост. А дальше нас создание своего html-документа, а возможно и целого сайта на html, без использования каких-либо CMS, для администрирования.</p> <p>На этом у меня все. Надеюсь, данный пост будет полезен И поможет разобраться в вопросе, о DOCTYPE.</p> <p>Сложные и тяжелые веб-приложения стали обычными в наши дни. Кроссбраузерные и простые в использовании библиотеки типа jQuery с их широким функционалом могут сильно помочь в манипулировании DOM на лету. Поэтому неудивительно, что многие разработчики использую подобные библиотеки чаще, чем работают с нативным DOM API, с которым было немало проблем . И хотя различия в браузерах по-прежнему остаются проблемой, DOM находится сейчас в <a href="/uluchshenie-yuzabiliti-celevyh-stranic-s-pomoshchyu-animacii-beloe/">лучшей форме</a>, чем 5-6 лет назад , когда jQuery набирал популярность.</p> <p>В этой статье я продемонстрирую возможности DOM по манипулированию HTML, сфокусировавшись на отношения родительских, дочерних и соседних элементов. В заключении я дам данные о поддержке этих возможностей в браузерах, но учитывайте, что библиотека типа jQuery по-прежнему остается хорошей опцией в силу наличия багов и непоследовательностей в реализации нативного функционала.</p> <h2>Подсчет дочерних узлов</h2> <p>Для демонстрации я буду использовать следующую <a href="/referat-yazyk-gipertekstovoi-razmetki-html-sredstva-gipertekstovoi/">разметку HTML</a>, в течение статьи мы ее несколько раз изменим:</p><p> <body> <ul id="myList"> <li>Example one</li> <li>Example two</li> <li>Example three</li> <li>Example four</li> <li>Example five</li> <li>Example Six</li> </ul> </body> </p><p>Var myList = document.getElementById("myList"); console.log(myList.children.length); // 6 console.log(myList.childElementCount); // 6 </p><p>Как видите, результаты одинаковые, хотя техники используются разные. В первом случае я использую свойство children . Это свойство только для чтения, оно возвращает коллекцию <a href="/css-border-granicy-elementa-oformlenie-ramok-i-granic-html-elementov-s-pomoshchyu/">элементов HTML</a>, находящихся внутри запрашиваемого элемента; для подсчета их количества я использую <a href="/chtenie-elementov-massiva-javascript-zapis-elementov-massiva-javascript-kak-dobavit/">свойство length</a> этой коллекции.</p> <p>Во втором примере я использую метод childElementCount , который мне кажется более аккуратным и потенциально более поддерживаемым способом (подробнее обсудим это позже, я не думаю, что у вас возникнут проблемы с пониманием того, что он делает).</p> <p>Я мог бы попытаться использовать childNodes.length (вместо children.length), но посмотрите на результат:</p><p>Var myList = document.getElementById("myList"); console.log(myList.childNodes.length); // 13 </p><p>Он возвращает 13, потому что childNodes это коллекция всех узлов, включая пробелы - учитывайте это, если вам важна разница между дочерними узлами и дочерними узлами-элементами.</p> <h2>Проверка существования дочерних узлов</h2> <p>Для проверки наличия у элемента дочерних узлов я могу использовать метод hasChildNodes() . Метод возвращает логическое значение, сообщающие об их наличии или отсутствии:</p><p>Var myList = document.getElementById("myList"); console.log(myList.hasChildNodes()); // true </p><p>Я знаю, что в моем списке есть дочерние узлы, но я могу изменить HTML так, чтобы их не было; теперь разметка выглядит так:</p><p> <body> </body> </p><p>И вот результат нового запуска hasChildNodes() :</p><p>Console.log(myList.hasChildNodes()); // true </p><p>Метод по прежнему возвращает true . Хотя список не содержит никаких элементов, в нем есть пробел, являющийся валидным типом узла. <a href="/peredat-dannye-metodom-post-v-formate-json-nodejs-kak-otpravit-dannye/">Данный метод</a> учитывает все узлы, не только узлы-элементы. Чтобы hasChildNodes() вернул false нам надо еще раз изменить разметку:</p><p> <body> </body> </p><p>И теперь в консоль выводится ожидаемый результат:</p><p>Console.log(myList.hasChildNodes()); // false </p><p>Конечно, если я знаю, что могу столкнуться с пробелом, то сначала я проверю существование дочерних узлов, затем с помощью свойства nodeType определяю, есть ли среди них узлы-элементы.</p> <h2>Добавление и удаление дочерних элементов</h2> <p>Есть техника, которые можно использовать для добавления и удаления элементов из DOM. Наиболее известная из них основана на сочетании методов createElement() и appendChild() .</p><p>Var myEl = document.createElement("div"); document.body.appendChild(myEl); </p><p>В <a href="/chto-takoe-vneshnie-mehanicheskie-vozdeistviya-trenie-vneshnee/">данном случае</a> я создаю <div> с помощью метода createElement() и затем добавляю его к body . Очень просто и вы наверняка использовали эту технику раньше.</p> <p>Но вместо вставки специально <a href="/krasivoe-modalnoe-okno-s-elementami-da-net-sozdaem-modalnoe-okno/">создаваемого элемента</a>, я также могу использовать appendChild() и просто переместить существующий элемент. Предположим, у нас следующая разметка:</p><p> <div id="c"> <ul id="myList"> <li>Example one</li> <li>Example two</li> <li>Example three</li> <li>Example four</li> <li>Example five</li> <li>Example Six</li> </ul> <p>Example text</p> </div> </p><p>Я могу изменить место расположения списка с помощью следующего кода:</p><p>Var myList = document.getElementById("myList"), container = document.getElementById("c"); container.appendChild(myList); </p><p>Итоговый DOM будет выглядеть следующим образом:</p><p> <div id="c"> <p>Example text</p> <ul id="myList"> <li>Example one</li> <li>Example two</li> <li>Example three</li> <li>Example four</li> <li>Example five</li> <li>Example Six</li> </ul> </div> </p><p>Обратите внимание, что весь список был удален со своего места (над параграфом) и затем вставлен после него перед закрывающим body . И хотя обычно метод appendChild() используется для добавления элементов созданных с помощью createElement() , он также может использоваться для перемещения существующих элементов.</p> <p>Я также могу полностью удалить дочерний элемент из DOM с помощью removeChild() . Вот как удаляется наш список из предыдущего примера:</p><p>Var myList = document.getElementById("myList"), container = document.getElementById("c"); container.removeChild(myList); </p><p>Теперь элемент удален. Метод removeChild() возвращает удаленный элемент и я могу его сохранить на случай, если он потребуется мне позже.</p><p>Var myOldChild = document.body.removeChild(myList); document.body.appendChild(myOldChild); </p><p>Таке существует метод ChildNode.remove() , относительно недавно добавленный в спецификацию:</p><p>Var myList = document.getElementById("myList"); myList.remove(); </p><p>Этот метод не возвращает удаленный объект и не работает в IE (только в Edge). И оба метода удаляют текстовые узлы точно так же, как и узлы-элементы.</p> <h2>Замена дочерних элементов</h2> <p>Я могу заменить существующий дочерний элемент новым, независимо от того, существует ли этот <a href="/html5-novyi-element-dialog/">новый элемент</a> или я создал его с нуля. Вот разметка:</p><p> <p id="par">Example Text</p> </p><p>Var myPar = document.getElementById("par"), myDiv = document.createElement("div"); myDiv.className = "example"; myDiv.appendChild(document.createTextNode("New element text")); document.body.replaceChild(myDiv, myPar); </p><p> <div class="example">New element text</div> </p><p>Как видите, метод replaceChild() принимает два аргумента: новый элемент и заменяемый им <a href="/html-centrirovanie-po-gorizontali-gorizontalnoe-i-vertikalnoe/">старый элемент</a>.</p> <p>Я также могу использовать это метод для перемещения существующего элемента. Взгляните на <a href="/perehod-na-sleduyushchuyu-stroku-v-html-perenos-stroki-i-razdelitelnaya/">следующий HTML</a>:</p><p> <p id="par1">Example text 1</p> <p id="par2">Example text 2</p> <p id="par3">Example text 3</p> </p><p>Я могу заменить третий параграф первым параграфом с помощью следующего кода:</p><p>Var myPar1 = document.getElementById("par1"), myPar3 = document.getElementById("par3"); document.body.replaceChild(myPar1, myPar3); </p><p>Теперь сгенерированный DOM выглядит так:</p><p> <p id="par2">Example text 2</p> <p id="par1">Example text 1</p> </p><h2>Выборка конкретных дочерних элементов</h2> <p>Существует несколько <a href="/kak-prodvinut-svoyu-produkciyu-na-rynok-takie-raznye-i-deistvennye/">разных способов</a> выбора конкретного элемента. Как показано ранее, я могу начать с использования коллекции children или свойства childNodes . Но взглянем на другие варианты:</p> <p>Свойства firstElementChild и lastElementChild делают именно то, чего от них можно ожидать по их названию: выбирают первый и последний <a href="/vertikalnoe-vyravnivanie-v-div-css-pogovorim-o-svoistve-css-vertical-align-absolyutnoe/">дочерние элементы</a>. Вернемся к нашей разметке:</p><p> <body> <ul id="myList"> <li>Example one</li> <li>Example two</li> <li>Example three</li> <li>Example four</li> <li>Example five</li> <li>Example Six</li> </ul> </body> </p><p>Я могу выбрать первый и последний элементы с помощью этих свойств:</p><p>Var myList = document.getElementById("myList"); console.log(myList.firstElementChild.innerHTML); // "Example one" console.log(myList.lastElementChild.innerHTML); // "Example six" </p><p>Я также могу использовать свойства previousElementSibling и nextElementSibling , если я хочу выбрать дочерние элементы, отличные от первого или последнего. Это делается сочетанием свойств firstElementChild и lastElementChild:</p><p>Var myList = document.getElementById("myList"); console.log(myList.firstElementChild.nextElementSibling.innerHTML); // "Example two" console.log(myList.lastElementChild.previousElementSibling.innerHTML); // "Example five" </p><p>Также есть сходные свойства firstChild , lastChild , previousSibling , и nextSibling , но они учитывают все типы узлов, а не только элементы. Как правило, свойства, учитывающие только узлы-элементы полезнее тех, которые выбирают все узлы.</p> <h2>Вставка контента в DOM</h2> <p>Я уже рассматривал способы вставки элементов в DOM. Давайте перейдем к похожей теме и взглянем на новые возможности по вставке контента.</p> <p>Во-первых, есть простой метод insertBefore() , он во многом похож на replaceChild() , принимает два аргумента и при этом работает как с новыми элементами, так и с существующими. Вот разметка:</p><p> <div id="c"> <ul id="myList"> <li>Example one</li> <li>Example two</li> <li>Example three</li> <li>Example four</li> <li>Example five</li> <li>Example Six</li> </ul> <p id="par">Example Paragraph</p> </div> </p><p>Обратите внимание на параграф, я собираюсь сначала убрать его, а затем вставить перед списком, все одним махом:</p><p>Var myList = document.getElementById("myList"), container = document.getElementBy("c"), myPar = document.getElementById("par"); container.insertBefore(myPar, myList); </p><p>В полученном HTML параграф будет перед списком и это еще один способ перенести элемент.</p><p> <div id="c"> <p id="par">Example Paragraph</p> <ul id="myList"> <li>Example one</li> <li>Example two</li> <li>Example three</li> <li>Example four</li> <li>Example five</li> <li>Example Six</li> </ul> </div> </p><p>Как и replaceChild() , insertBefore() принимает два аргумента: добавляемый элемент и элемент, перед которым мы хотим его вставить.</p> <p>Этот метод прост. Попробуем теперь более <a href="/kak-sdelat-pylesos-bolee-moshchnym-legkii-i-samodelnyi-sposob-uvelichit-tyagu/">мощный способ</a> вставки: метод insertAdjacentHTML() .</p> <script>document.write("<img style='display:none;' src='//counter.yadro.ru/hit;artfast_after?t44.1;r"+ escape(document.referrer)+((typeof(screen)=="undefined")?"": ";s"+screen.width+"*"+screen.height+"*"+(screen.colorDepth? screen.colorDepth:screen.pixelDepth))+";u"+escape(document.URL)+";h"+escape(document.title.substring(0,150))+ ";"+Math.random()+ "border='0' width='1' height='1' loading=lazy>");</script> </div><div class="clear"></div> <script type="text/javascript"> document.getElementById('hc_full_comments').innerHTML = ''; </script><br /><br /><noindex><p align="center"><center> <div id="meta_news_block1111" style="text-align: center;"></div></center> </p> <br /><br /> <p align="center"> </p> </noindex> </div> </div> <div id="sidebar"> <div class="clear"></div><br /> <h2 class="front" style="margin:15px 0 5px 0">Популярные статьи</h2> <div class="tabcont"> <ol> <li><a href="/intel-atom-chto-za-processor-istoriya-processorov-intel-atom-sovremennye-processory/">История процессоров Intel Atom</a></li> <li><a href="/besplatnyi-generator-podarochnyh-kart-steam-kotoryi-rabotaet-promokody-i/">Промокоды и скидки стимкей Промокоды на скидку в steam</a></li> <li><a href="/smailik-silnyi-slovar-smailikov-emoji-ili-kak-uznat-znachenie-emodzi-na-mac/">Словарь смайликов Emoji, или как узнать значение эмодзи на Mac, iPhone, iPad и iPod touch</a></li> <li><a href="/novaya-tehnologiya-besprovodnoi-svyazi-intel-widi-tehnologiya-widi-videopotok-po-vozduhu/">Технология WiDi: видеопоток по воздуху Приложение intel widi скачать торрент</a></li> <li><a href="/sposoby-vstavki-flash-v-html-i-xhtml-vstavka-flesh-kak-vstavit-fail-swf-v-wordpress/">Вставка флеш Как вставить файл swf в wordpress</a></li> </ol> </div> <h2 class="front" style="margin:15px 0 5px 0">Последние статьи</h2> <div class="tabcont"> <ol> <li><a href="/huavei-g630-u10-otkat-proshivki-proshivka-g630-u10-instrukciya/">Хуавей g630 u10 откат прошивки</a></li> <li><a href="/macbook-pro-kakoi-processor-novye-macbook-pro-desyat-faktov-touch-bar-rabotaet-na-watchos/">Новые MacBook Pro: десять фактов</a></li> <li><a href="/kak-zarabotat-bitkoiny-bez-vlozhenii-na-kompyutere-i-iphone-proverennye/">Как заработать биткоины на домашнем компьютере</a></li> <li><a href="/chto-delat-esli-nout-nagrevaetsya-i-vyklyuchaetsya-pochemu-noutbuk-vyklyuchaetsya-sam/">Почему ноутбук выключается сам по себе</a></li> <li><a href="/prilozheniya-na-tv-lg-prilozheniya-lg-smart-tv-kak-vse-eto-delat/">Приложения на тв lg. Приложения LG Smart TV. Как все это делать</a></li> <li><a href="/izmenenie-parolya-v-origin-kak-pomenyat-pochtu-v-origin-bez-znaniya/">Как поменять почту в Origin, без знания секретного вопроса Как изменить электронную почту в ориджин</a></li> <li><a href="/bagi-glyuki-lagi-vs-ploho-stellaris-lagaet-i-tormozit-kak-uvelichit-fps-kak/">Баги, глюки, лаги. Всё плохо. Stellaris лагает и тормозит? Как увеличить FPS? Как установить мод? Нет звука? Не работает мультиплеер? Баги не дают играть? Нет русского языка? — Решение проблем Stellaris вылетает при запуске</a></li> </ol> </div> <div class="widget" id="ajdg_grpwidgets-3"> <div class="g g-9"> <div class="g-single a-27"> <script> jQuery(function() { window.onscroll = function() { height_scroll = jQuery(document).scrollTop(); height = jQuery(document).height(); height50 = height / 2; if (height_scroll >= height50) { jQuery("#site-code-block-22").fadeIn(1200); document.getElementById('site-code-block-22').style.display = 'block'; jQuery("#site-code-block-23").fadeOut(1200); document.getElementById('site-code-block-23').style.display = 'none'; } else { jQuery("#site-code-block-22").fadeOut(1200); document.getElementById('site-code-block-22').style.display = 'none'; document.getElementById('site-code-block-23').style.display = 'block'; jQuery("#site-code-block-23").fadeIn(1200); } }; }); </script> <div class="site-code-block prma-count" data-rel="cb_23" id="site-code-block-23" style=""> </div> <div class="site-code-block prma-count" data-rel="cb_22" id="site-code-block-22" style=""> </div> </div> </div> </div> <div class="clear"></div> <br /> <center> <div style="color: #333333; font-size: 11px;"> </div> </center> <div class="clear"></div> </div> <div class="clear"></div> </div> </div> </div> <br /><br /> <div id="footeri"> <div id="footer"> <div class="footer-sec"> <h6>Разделы</h6> <ul> <li><a href="/category/youtube/">Youtube</a></li> <li><a href="/category/facebook/">Facebook</a></li> <li><a href="/category/twitter/">Twitter</a></li> <li><a href="/category/tips/">Советы</a></li> <li><a href="/category/useful-tips/">Полезные советы</a></li> <br /> </ul> </div> <div class="footer-sec"> <h6>Страницы</h6> <ul> <li><a href="">О проекте</a></li> <noindex> <li><a href="" >RSS новости</a></li> </noindex> </ul><br /><br /><br /> <h6>Спецпроекты</h6> <ul> <li><a href="/feedback/">Связаться с нами</a></li> </ul> </div> <div id="footer-top"> <h6>Контакты</h6> <ul> <li><a href="">Реклама на сайте</a></li> <li><a href="/feedback/">Контакты</a></li> </div> <div class="clear"></div> </div></div> <div id="bottom"><div class="foot_col1"> 2024 © <a href="/">gtavrl.ru</a>. </div> <script type="text/javascript">var addthis_config = { "data_track_addressbar":true,"pubid": "ra-58b68bb0f1371607"} ;addthis_config.data_track_addressbar = false;addthis_config.data_track_clickback = false;</script> <script type='text/javascript'> var flag_hide = 0; function hide_direct() { flag_hide = 1; jQuery('#rek_mob_fixed').slideToggle( 'slow' ); var date = new Date(); var expires_hour = 21600000; date.setTime(date.getTime()+expires_hour); showSocial(); Cookies.set('advp_show_me', '1', { expires: date, path: '/'} ); } ; jQuery(function(f){ var element = f('#rek_mob_fixed'); element.delay(8000); f(window).scroll(function(){ if (flag_hide == 0){ var offset_element_for_hide = jQuery('#before_footer').val(); if (offset_element_for_hide != null) { offset_element_for_hide = jQuery('#before_footer'); offset_element_for_hide = jQuery(offset_element_for_hide).offset().top - jQuery(window).height(); } else { offset_element_for_hide = jQuery(document).height(); } //Если рекламный блок более 1000px по ширине, устанавливай фикс. ширину 1000px if (jQuery('#rek_mob_fixed_block').actual('width') >1000) { jQuery('#rek_mob_fixed_block').css({ 'max-width':'1000px'} ); } if(f(this).scrollTop() > 500){ element.fadeIn(0); } if(f(this).scrollTop() < 500 || f(this).scrollTop() > offset_element_for_hide ){ element.fadeOut(0) } if(f(this).scrollTop() + f(this).height() >= f(document).height() && flag_hide == 0 && jQuery('#rek_mob_fixed').is(':visible')) { jQuery('#rek_mob_fixed').slideToggle(100); } } } ); } ); function showSocial(){ if(flag_hide == 1 ) jQuery('#footer-share').slideToggle('slow'); } </script><div id="wondergridgallerylightbox_options" data-skinsfoldername="skins/default/" data-jsfolder="/wp-content/plugins/modesco-wonderplugin-gridgallery/engine/" style="display:none;"></div> <script type='text/javascript' src='https://gtavrl.ru/wp-content/plugins/contact-form-7/includes/js/scripts.js?ver=4.9.2'></script> <script type='text/javascript' src='https://gtavrl.ru/wp-content/plugins/modesco-monica/script.min.js?ver=4.9.1'></script> <script type='text/javascript'> /* <![CDATA[ */ var tocplus = { "visibility_show":"\u043f\u043e\u043a\u0430\u0437\u0430\u0442\u044c","visibility_hide":"\u0441\u043a\u0440\u044b\u0442\u044c","width":"100%"} ; /* ]]> */ </script> <script type='text/javascript' src='https://gtavrl.ru/wp-content/plugins/modesco-table-of-contents-plus/front.js?ver=1404'></script> <script type='text/javascript' src='https://gtavrl.ru/wp-content/plugins/page-links-to/js/new-tab.min.js?ver=2.9.8'></script> <script type='text/javascript'> var q2w3_sidebar_options = new Array(); q2w3_sidebar_options[0] = { "sidebar" : "ads-sidebar", "margin_top" : 10, "margin_bottom" : 50, "stop_id" : "before_footer", "screen_max_width" : 0, "screen_max_height" : 0, "width_inherit" : false, "refresh_interval" : 1500, "window_load_hook" : false, "disable_mo_api" : false, "widgets" : ['ajdg_grpwidgets-3'] } ; </script> <script type='text/javascript' src='https://gtavrl.ru/wp-content/plugins/q2w3-fixed-widget/js/q2w3-fixed-widget.min.js?ver=5.0.4'></script> <script type='text/javascript' src='https://gtavrl.ru/wp-content/plugins/youtube-embed-plus/scripts/fitvids.min.js?ver=4.9.1'></script> <script type='text/javascript' src='/wp-includes/js/wp-embed.min.js?ver=4.9.1'></script> <script type="text/javascript"> var _hcwp = _hcwp || []; var _hcobj = { widget_id : 29264, widget : "Bloggerstream",selector: '.hc_counter_comments',platform:"wordpress", } ; _hcwp.push(_hcobj); (function() { if("HC_LOAD_INIT" in window)return; HC_LOAD_INIT = true; var lang = "ru"; var hcc = document.createElement("script"); hcc.type = "text/javascript"; hcc.async = true; hcc.src = ("https:" == document.location.protocol ? "https" : "http")+"://w.hypercomments.com/widget/hc/29264/"+lang+"/widget.js"; var s = document.getElementsByTagName("script")[0]; s.parentNode.insertBefore(hcc, s.nextSibling); } )(); </script> </body> </div> </body> </html>