JavaScript. Подробное руководство, 6-е издание
Шрифт:
* имеет встроенную поддержку в броузере, функция возвращает объект, подобный массиву,
* который имеет свойство length и поддерживает возможность индексирования массива.
* Имитация объекта DOMTokenList не подобна массиву, но имеет метод toArray.
* который возвращает истинный массив имен классов элемента.
*/
function classList(e) {
if (е.classList) return e.classList; // Вернуть e.classList, если имеется
else return new CSSClassList(e); // Иначе попытаться подделать его
}
// CSSClassList - класс JavaScript, имитирующий объект DOMTokenList
function CSSClassList(e) { this.e = e; }
// Возвращает true, если e.className содержит класс с, иначе - false
CSSClassList.prototype.contains = function(c) {
// Проверить, является ли с допустимым именем класса
if (с.length === 0 || c.indexOf(" ") != -1)
throw new Error("Недопустимое имя класса: + с + .....);
// Сначала проверить общие случаи
var classes = this.e.className;
if (!classes) return false; // e вообще не имеет классов
if (classes === c) return true; // e имеет единственный класс,
// имя которого точно совпадает с искомым
// Иначе использовать RegExp для поиска с как отдельного слова
// \b - в регулярных выражениях соответствует границе слова,
return classes.search(”\\b" + с + "\\b") != -1;
};
// Добавляет имя класса с в е.className, если оно отсутствует в списке
CSSClassList.prototype.add = function(c) {
if (this.contains(c)) return; // Ничего не делать, если имя уже в списке
var classes = this.e.className;
if (classes && classes[classes.length-1] != " ")
c = " " + с; // Добавить пробел, если необходим
this.е.className += с; // Добавить имя с в className
};
// Удаляет все вхождения с из е.className
CSSClassList.prototype.remove = function(c) {
// Убедиться, что с - допустимое имя класса
if (с.length === 0 || c.indexOf(" ") != -1)
throw new Error("Недопустимое имя класса: + с + .....);
// Удалить все вхождения имени с как слова и все завершающие пробелы
var pattern = new RegExp("\\b" + с + '\\b\\s*'\ "g");
this.e.className = this.e.className.replace(pattern, "");
};
// Добавляет имя с в e.className, если оно отсутствует в списке, и возвращает true.
// Иначе удаляет все вхождения имени с из e.className и возвращает false.
CSSClassList.prototype.toggle = function(c) {
if (this.contains(c)) { // Если e.className содержит c
this.remove(c); // удалить его.
return false;
}
else { // Иначе:
this.add(c); // добавить его.
return true;
}
};
// Возвращает само значение e.className
CSSClassList.prototype.toString = function { return this.e.className; };
// Возвращает имена из e.className
CSSClassList.prototype.toArray = function {
return this.e.className.match(/\b\w+\b/g) || [];
};
16.6. Управление таблицами стилей
До сих пор мы видели, как устанавливать и получать значения CSS-свойств стиля и классы отдельных элементов. Однако существует еще возможность управления самими таблицами стилей CSS. Обычно в этом не возникает необходимости, тем не менее такая возможность иногда бывает полезной, и в этом разделе коротко будут представленные возможные приемы.
Поделиться:
Популярные книги
Ермак. Противостояние. Книга одиннадцатая
11. Ермак
Фантастика:
попаданцы
альтернативная история
4.50
рейтинг книги
Неучтенный элемент. Том 12
12. Антимаг. Вне системы
Фантастика:
фэнтези
5.00
рейтинг книги
Товарищ "Чума" 2
2. Товарищ "Чума"
Фантастика:
городское фэнтези
попаданцы
альтернативная история
5.00
рейтинг книги
Кодекс Охотника. Книга XXXVII
37. Кодекс Охотника
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Дважды одаренный. Том VII
7. Дважды одаренный
Фантастика:
аниме
фэнтези
попаданцы
5.00
рейтинг книги
Герцог и я
1. Бриджертоны
Любовные романы:
исторические любовные романы
8.92
рейтинг книги
Черный Маг Императора 10
10. Черный маг императора
Фантастика:
юмористическое фэнтези
попаданцы
аниме
сказочная фантастика
фэнтези
5.00
рейтинг книги
Лондон
The Big Book
Проза:
историческая проза
6.67
рейтинг книги
Гардемарин
1. Андреевский флаг
Фантастика:
попаданцы
альтернативная история
7.14
рейтинг книги
Кодекс Охотника. Книга IX
9. Кодекс Охотника
Фантастика:
боевая фантастика
городское фэнтези
попаданцы
5.00
рейтинг книги
Я снова граф. Книга XI
11. Дорогой барон!
Фантастика:
боевая фантастика
попаданцы
аниме
5.00
рейтинг книги
Изгой Проклятого Клана. Том 6
6. Изгой
Фантастика:
аниме
фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Сирийский рубеж
5. Рубеж
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Начало
1. Второй шанс
Фантастика:
фэнтези
5.00
рейтинг книги