Чтение онлайн

на главную - закладки

Жанры

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

Веб-броузеры прекрасно справляются с синтаксическим анализом разметки HTML, поэтому операция изменения значения свойства

innerHTML
обычно достаточно эффективна, несмотря на необходимость синтаксического анализа. Тем не менее обратите внимание, что многократное добавление фрагментов текста в свойство
innerHTML
с помощью оператора
+=
обычно далеко не эффективное решение, потому что требует выполнения двух шагов - сериализации и синтаксического анализа.

Впервые свойство

innerHTML
было реализовано в IE4. Несмотря на то что оно достаточно давно поддерживается всеми броузерами, это свойство было стандартизовано только с появлением стандарта HTML5. Спецификация HTML5 требует, чтобы свойство
innerHTML
было реализовано не только в объекте
Element
, но и в объекте
Document
, однако пока этому требованию отвечают не все броузеры.

Кроме того, спецификация HTML5 стандартизует свойство с именем

outerHTML
. При обращении к свойству
outerHTML
оно возвращает строку разметки HTML или XML, содержащую открывающий и закрывающий теги элемента, которому принадлежит это свойство. При записи нового значения в свойство
outerHTML
элемента новое содержимое замещает элемент целиком. Свойство
outerHTML
определено только для узлов типа
Element
, оно отсутствует в объекте
Document
. К моменту написания этих строк свойство
outerHTML
поддерживалось всеми текущими броузерами, кроме Firefox. (В примере 15.5, далее в этой главе, приводится реализация свойства
outerHTML
на основе свойства
innerHTML
.)

Еще одной особенностью, впервые появившейся в IE и стандартизованной спецификацией HTML5, является метод

insertAdjacentHTML
, дающий возможность вставить строку с произвольной разметкой HTML, прилегающую («adjacent») к указанному элементу. Разметка передается методу во втором аргументе, а точное значение слова «прилегающая» («adjacent») зависит от значения первого аргумента. Этот первый аргумент должен быть строкой с одним из значений: «beforebegin», «afterbegin», «beforeend» или «afterend». Эти значения определяют позицию вставки, как изображено на рис. 15.3.

Метод

insertAdjacentHTML
не поддерживается текущей версией Firefox. Далее в этой главе будет представлен пример 15.6, демонстрирующий, как можно реализовать метод
insertAdjacentHTML
с применением свойства
innerHTML
и как можно написать методы вставки разметки HTML, не требующие указывать позицию вставки с помощью строкового аргумента.

15.5.2. Содержимое элемента в виде простого текста

Иногда бывает необходимо получить содержимое элемента в виде простого текста или вставить простой текст в документ (без необходимости экранировать угловые скобки и амперсанды, используемые в разметке HTML). Стандартный способ выполнения этих операций основан на использовании свойства

textContent
объекта
Node
:

var para = document.getElementsByTagName("p")[0]; // Первый в документе

var text = para.textContent; // Текст "This is a simple document."

para.textContent = "Hello World!"; // Изменит содержимое абзаца

Свойство

textContent
поддерживается всеми текущими броузерами, кроме IE. В IE вместо него можно использовать свойство
innerText
. Впервые свойство
innerText
было реализовано в IE4 и поддерживается всеми текущими броузерами, кроме Firefox.

Свойства

textContent
и
innerText
настолько похожи, что обычно могут быть взаимозаменяемы при использовании. Однако будьте внимательны и отличайте пустые элементы (строка "" в языке JavaScript интерпретируется как ложное значение) от неопределенных свойств:

/**

* При вызове с одним аргументом возвращает значение свойства textContent

* или innerText элемента. При вызове с двумя аргументами записывает

* указанное значение в свойство textContent или innerText элемента.

*/

function textContent(element, value) {

var content = element.textContent;

// Свойство textContent определено?

if (value === undefined) { // Если аргумент value не указан,

if (content !== undefined) return content; // вернуть текущий текст

else return element.innerText;

}

else { // Иначе записать текст

if (content !== undefined) element.textContent = value;

else element.innerText = value;

}

}

Свойство

textContent
возвращает результат простой конкатенации всех узлов
Text
, потомков указанного элемента. Свойство
innerText
не обладает четко определенным поведением и имеет несколько отличий от свойства
textContent.innerText
не возвращает содержимое элементов
<script>.
Из возвращаемого им текста удаляются лишние пробелы и предпринимается попытка сохранить табличное форматирование. Кроме того, для некоторых элементов таблиц, таких как
<table>, <tbody>
и
<tr>,
свойство
innerText
доступно только для чтения.

Поделиться:
Популярные книги

Я еще не князь. Книга XIV

Дрейк Сириус
14. Дорогой барон!
Фантастика:
юмористическое фэнтези
попаданцы
аниме
5.00
рейтинг книги
Я еще не князь. Книга XIV

Варвара Асенкова

Алянский Юрий Лазаревич
Корифеи русской и зарубежной сцены
Документальная литература:
биографии и мемуары
5.00
рейтинг книги
Варвара Асенкова

Дитя прибоя

Трофимов Ерофей
Дитя прибоя
Фантастика:
боевая фантастика
попаданцы
фэнтези
5.00
рейтинг книги
Дитя прибоя

Царь царей

Билик Дмитрий Александрович
9. Бедовый
Фантастика:
фэнтези
мистика
5.00
рейтинг книги
Царь царей

На границе империй. Том 10. Часть 5

INDIGO
23. Фортуна дама переменчивая
Фантастика:
космическая фантастика
попаданцы
5.00
рейтинг книги
На границе империй. Том 10. Часть 5

Избрание сочинения в трех томах. Том второй

Кочетов Всеволод Анисимович
Проза:
советская классическая проза
5.00
рейтинг книги
Избрание сочинения в трех томах. Том второй

Законы Рода. Том 9

Мельник Андрей
9. Граф Берестьев
Фантастика:
городское фэнтези
попаданцы
аниме
дорама
фэнтези
фантастика: прочее
5.00
рейтинг книги
Законы Рода. Том 9

Афганский рубеж

Дорин Михаил
1. Рубеж
Фантастика:
попаданцы
альтернативная история
7.50
рейтинг книги
Афганский рубеж

Воин

Бубела Олег Николаевич
2. Совсем не герой
Фантастика:
фэнтези
попаданцы
9.25
рейтинг книги
Воин

Граф Книга третья

Первухин Андрей Евгеньевич
10. Ученик
Фантастика:
фэнтези
попаданцы
5.25
рейтинг книги
Граф Книга третья

Второгодка. Книга 5. Презренный металл

Ромов Дмитрий
5. Второгодка
Фантастика:
городское фэнтези
фантастика: прочее
попаданцы
5.00
рейтинг книги
Второгодка. Книга 5. Презренный металл

Матабар

Клеванский Кирилл Сергеевич
1. Матабар
Фантастика:
фэнтези
5.00
рейтинг книги
Матабар

Воронцов. Перезагрузка. Книга 2

Тарасов Ник
2. Воронцов. Перезагрузка
Фантастика:
попаданцы
альтернативная история
фэнтези
5.00
рейтинг книги
Воронцов. Перезагрузка. Книга 2

Чужак из ниоткуда 2

Евтушенко Алексей Анатольевич
2. Чужак из ниоткуда
Фантастика:
попаданцы
альтернативная история
5.00
рейтинг книги
Чужак из ниоткуда 2