JavaScript. Подробное руководство, 6-е издание, стр. 202

<b>var snapshot = Array.prototype.slice.call(nodelist, 0);</b>

****************************************

15.2.4. Выбор элементов по классу CSS

Значением HTML-атрибута

<b>class</b>
является список из нуля или более идентификаторов, разделенных пробелами. Он дает возможность определять множества связанных элементов документа: любые элементы, имеющие в атрибуте
<b>class</b>
один и тот же идентификатор, являются частью одного множества. Слово
<b>class</b>
зарезервировано в языке JavaScript, поэтому для хранения значения HTML-атрибута
<b>class</b>
в клиентском JavaScript используется свойство
<b>className</b>
. Обычно атрибут
<b>class</b>
используется вместе с каскадными таблицами стилей CSS, с целью применить общий стиль отображения ко всем членам множества, и мы еще будем рассматривать эту тему в главе 16. Однако кроме этого, стандарт HTML5 определяет метод
<b>getElementsByClassName()</b>
, позволяющий выбирать множества элементов документа на основе идентификаторов в их атрибутах
<b>class</b>
.

Подобно методу

<b>getElementsByTagName()</b>
, метод
<b>getElementsByClassName()</b>
может вызываться и для HTML-документов, и для HTML-элементов, и возвращает «живой» объект
<b>NodeList</b>
, содержащий все потомки документа или элемента, соответствующие критерию поиска. Метод
<b>getElementsByClassName()</b>
принимает единственный строковый аргумент, но в самой строке может быть указано несколько идентификаторов, разделенных пробелами. Соответствующими будут считаться все элементы, атрибуты
<b>class</b>
которых содержат все указанные идентификаторы. Порядок следования идентификаторов не имеет значения. Обратите внимание, что и в атрибуте
<b>class</b>
, и в аргументе метода
<b>getElementsByClassName()</b>
идентификаторы классов разделяются пробелами, а не запятыми. Ниже приводится несколько примеров использования метода
<b>getElementsByClassName():</b>

<b>// Отыскать все элементы с идентификатором &quot;warning&quot; в атрибуте class </b>

<b>var warnings = document.getElementsByClassName(&quot;warning&quot;);</b>

<b>// Отыскать всех потомков элемента с именем &quot;log&quot; с идентификаторами &quot;error&quot;</b>

<b>// и &quot;fatal&quot; в атрибуте class</b>

<b>var log = document.getElementById(&quot;log&quot;);</b>

<b>var fatal = log.getElementsByClassName(&quot;fatal error&quot;);</b>

Современные броузеры отображают HTML-документы в «режиме совместимости» или в «стандартном режиме», в зависимости от строгости объявления

<b>&lt;!D0C-TYPE&gt;</b>
в начале документа. Режим совместимости поддерживается для сохранения обратной совместимости, и одна из его особенностей состоит в том, что идентификаторы классов в атрибуте
<b>class</b>
и каскадных таблицах стилей CSS нечувствительны к регистру символов. Метод
<b>getElementsByClassName()</b>
следует алгоритму сопоставления, используемому таблицами стилей. Если документ отображается в режиме совместимости, метод сравнивает строки без учета регистра символов. В противном случае сравнение выполняется с учетом регистра символов.

К моменту написания этих строк метод

<b>getElementsByClassName()</b>
был реализован во всех текущих броузерах, за исключением IE8 и более ранних версий. Однако IE8 поддерживает метод
<b>querySelectorAll(),</b>
описываемый в следующем разделе, на основе которого можно реализовать метод
<b>getElementsByClassName()</b>
.

15.2.5. Выбор элементов с использованием селекторов CSS

Каскадные таблицы стилей CSS имеют очень мощные синтаксические конструкции, известные как селекторы, позволяющие описывать элементы или множества элементов документа. Полное описание синтаксиса селекторов CSS выходит далеко за рамки этой книги [34], однако несколько примеров помогут прояснить их основы. Элементы можно описать с помощью имени тега и атрибутов

<b>id</b>
и
<b>class</b>
:

<b>#nav // Элемент с атрибутом id=&quot;nav&quot;</b>

<b>div // Любой элемент &lt;div&gt;</b>

<b>.warning // Любой элемент с идентификатором &quot;warning&quot; в атрибуте class</b>

В более общем случае элементы можно выбирать, опираясь на значения атрибутов:

<b>p[lang=&quot;fr”] // Абзац с текстом на французском языке: &lt;р lang=&quot;fr&quot;&gt;</b>

<b>*[name=&quot;x&quot;] // Любой элемент с атрибутом nаше=&quot;х&quot;</b>

Эти простейшие селекторы можно комбинировать:

<b>span.fatal.error // Любой элемент &lt;span&gt; с классами &quot;fatal&quot; и &quot;error&quot;</b>

<b>span[lang=&quot;fг&quot;].warning // Любое предупреждение на французском языке</b>

С помощью селекторов можно также определять взаимоотношения между элементами:

<b>#log span // Любой элемент &lt;span&gt;, являющийся потомком элемента с id=&quot;log&quot;</b>

<b>#log&gt;span // Любой элемент &lt;span&gt;, дочерний по отношению к элементу с id=”log&quot; </b>

<b>body&gt;h1:first-child // Первый элемент &lt;h1&gt;, дочерний по отношению к &lt;body&gt;</b>

Селекторы можно комбинировать для выбора нескольких элементов или множеств элементов: