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

<b>CSSClassList.prototype.toggle = function(c) {</b>

<b>  if (this.contains(c)) { // Если e.className содержит c</b>

<b>    this.remove(c); // удалить его.</b>

<b>    return false;</b>

<b>  }</b>

<b>  else { // Иначе:</b>

<b>    this.add(c); // добавить его.</b>

<b>    return true;</b>

<b>  }</b>

<b>};</b>

<b>// Возвращает само значение e.className</b>

<b>CSSClassList.prototype.toString = function() { return this.e.className; };</b>

<b>// Возвращает имена из e.className </b>

<b>CSSClassList.prototype.toArray = function() {</b>

<b>  return this.e.className.match(/\b\w+\b/g) || [];</b>

<b>};</b>

16.6. Управление таблицами стилей

До сих пор мы видели, как устанавливать и получать значения CSS-свойств стиля и классы отдельных элементов. Однако существует еще возможность управления самими таблицами стилей CSS. Обычно в этом не возникает необходимости, тем не менее такая возможность иногда бывает полезной, и в этом разделе коротко будут представленные возможные приемы.

При работе с самими таблицами стилей вам придется столкнуться с двумя типами объектов. Первый тип - это объекты

<b>Element</b>
, представляющие элементы
<b>&lt;style&gt;</b>
и
<b>&lt;link&gt;,</b>
которые содержат или ссылаются на таблицы стилей. Это обычные элементы документа, и если в них определить атрибут
<b>id</b>
, вы сможете выбирать их с помощью метода
<b>document.getElementByld().</b>
Второй тип объектов - объекты
<b>CSSStyleSheet</b>
, представляющие сами таблицы стилей. Свойство
<b>document.styleSheets</b>
возвращает доступный только для чтения объект, подобный массиву, содержащий объекты
<b>CSSStyleSheet</b>
, представляющие таблицы стилей документа. Если в элементе
<b>&lt;style&gt;</b>
или
<b>&lt;link&gt;,</b>
определяющем или ссылающемся на таблицу стилей, определить атрибут
<b>title</b>
, этот объект будет доступен как свойство объекта
<b>CSSStyleSheet</b>
с именем, указанным в атрибуте
<b>title</b>
.

Следующие разделы описывают, какие операции могут выполняться с этими элементами

<b>&lt;style&gt;</b>
и
<b>&lt;link&gt;</b>
и объектами таблиц стилей.

16.6.1. Включение и выключение таблиц стилей

Простейший прием работы с таблицами стилей является к тому же самым переносимым и надежным. Элементы

<b>&lt;style&gt;</b>
и
<b>&lt;link&gt;</b>
и объекты
<b>CSSStyleSheet</b>
определяют свойство
<b>disabled</b>
, доступное сценариям на языке JavaScript для чтения и записи. Как следует из его имени, если свойство
<b>disabled </b>
принимает значение true, таблица стилей оказывается отключенной и будет игнорироваться броузером.

Это наглядно демонстрирует функция

<b>disableStylesheet(),</b>
представленная ниже. Если передать ей число, она будет интерпретировать его как индекс в массиве
<b>document.styleSheets</b>
. Если передать ей строку, она будет интерпретировать ее как селектор CSS, передаст ее методу
<b>document.querySelectorAll()</b>
(раздел 15.2.5) и установит в значение true свойство
<b>disabled</b>
всех полученных элементов:

<b>function disableStylesheet(ss) {</b>

<b>  if (typeof ss === &quot;number&quot;)</b>

<b>    document.styleSheets[ss].disabled = true;</b>

<b>  else {</b>

<b>    var sheets = document.querySelectorAll(ss);</b>

<b>    for(var і = 0; і &lt; sheets.length; i++) sheets[i].disabled = true;</b>

<b>  }</b>

<b>}</b>

16.6.2. Получение, вставка и удаление правил из таблиц стилей

В дополнение к возможности включения и отключения таблиц стилей объект

<b>CSSStyleSheet</b>
также определяет API для получения, вставки и удаления правил стиля из таблиц стилей. IE8 и более ранние версии реализуют несколько иной API, отличный от стандартного, реализуемого другими броузерами.

Как правило, непосредственное манипулирование таблицами стилей редко бывает полезным. Вместо того чтобы добавлять новые правила в таблицы стилей, обычно лучше оставить их статичными и работать со свойством

<b>className</b>
элемента. В то же время, если необходимо предоставить пользователю возможность полного управления таблицами стилей веб-страницы, может потребоваться организовать динамическое манипулирование таблицами.

Объекты

<b>CSSStyleSheet</b>
хранятся в массиве
<b>document.styleSheets[].</b>
Объект
<b>CSSStyleSheet</b>
имеет свойство
<b>cssRules[],</b>
хранящее массив правил стилей:

<b>var firstRule = document.styleSheets[0].cssRules[0];</b>

В IE это свойство носит имя

<b>rules</b>
, а не
<b>cssRules</b>
.