×Закрыть

Как в JavaScript вставить спецсимвол в DOM-модель

Есть некоторые вещи, которые лежат наверху, но глаз почему-то шарит внизу, слева, справа или даже еще выше. Вот одна из таких вещей, которые меня всегда интересовали, был следующий вопрос: как в Javascript в DOM-модель документа динамически добавить ноду (node) со спецсимволами вроде « », «–» и так далее.

Хотя по роду работы время от времени и требуется писать взаимодействие DOM-JS, но « » не доставал — всегда достаточно было добавить обычный пробел, а его неразрывная версия спокойно курила в сторонке. До тех пор, пока в одном компоненте вопрос не стал ребром — нужен был только « ».

Что странно — но Yandex и Google не дали ничего. Даже друзья сказали, что этот вопрос их слегка интересовал, но ответа они так и не узнали. И только логические размышления о поведении браузеров и о природе разметки наконец дали решение. Очень простое!

Все спецсимволы с префиксом «&» образуют самые обычные строки текстовых нод, что легко видно в том же инспекторе DOM в Firefox. Соответственно, можно получить Unicode-значение символа в строке методом String.charCodeAt(index) или по значению получить сам символ методом String.fromCharCode(num).

Итого, решение:

<script>
//Добавить в body символ с кодом 160, то есть "&nbsp;"
var node = document.createTextNode(String.fromCharCode(160));
document.body.appendChild(node);
</script>

Коды других символов приведены в табличке W3C — ее откопал позже, когда надоело задавать в HTML нужный символ, а потом выводить его код alert-ом.

Приятной разработки ;)

  • Популярное

7 комментариев

Подписаться на комментарииОтписаться от комментариев Комментарии могут оставлять только пользователи с подтвержденными аккаунтами.

Юрий, спасибо за «u00A0»!!!

Спасибо за статью, для меня она сейчас актуальна.Думаю, всё таки проще писать не

String.fromCharCode(160)

, а

"u00A0"

. То есть задать символ ка 16-ричную константу.

Зато насколько проще писать:) Под виндой: Alt+160Под иксами: Compose, Space, SpaceСтавь куда хочу;)

Ну кирилицу вы же пишите символами, а не кодами. И немцы, например, умляуты тоже не кодами пишут. Редактор с поддержкой UTF-8 сейчас найти не сложно:) PS: Хотя я конечно согласен что не всегда это нужно. В случае с пробелом невизуально получается. Тут больше от задачи зависит, нужна эта визуальность, или нет.

А это и есть неразрывный:) Привыкайте к Юникоду.

А можно и так;)

var node = document.createTextNode(' ');document.body.appendChild(node);

Подписаться на комментарии