У меня есть функция, создающая HTML/CSS MessageBox, где я хочу отобразить переменную (уже экранированную с помощью PHP json_encode(), инъекция XSS невозможна). Я хочу отобразить эту переменную в жестко запрограммированном сообщении, это всегда одно и то же сообщение. Сообщение отображает эту переменную между полужирными HTML-тегами <b></b>
:
Message("Do you really want to delete <b>" + reference + "</b> ?");
Строка, переданная функции Message(), будет добавлена в тег div, и единственное решение, которое у меня есть, — это использовать innerHTML, если я хочу, чтобы ссылка на переменную отображалась жирным шрифтом.
Многие люди говорят: «Не используйте innerHTML, он не нормализован», «Это проприетарная функция Microsoft, это не W3C и, возможно, больше не будет поддерживаться».
Я всегда использовал методы DOM, но в моем случае свойство DOM1 myDiv.firstChild.nodeValue или даже метод DOM3 myDiv.textContent не будут работать, потому что строка отображается только как текст.
Преимущество метода innerHTML заключается в том, что он не пропускает <>
characters с объектами HTML, и, к сожалению, я думаю, что невозможно получить тот же результат с помощью методов DOM.
Я не могу использовать метод document.createElement("b"), это все усложнит, так как я хочу, чтобы моя функция Message() получала полную стилизованную строку в качестве одного параметра.
Итак, я думаю, что в некоторых случаях нужно использовать innerHTML вместо того, чтобы усложнять вещи, и это неплохая практика, в зависимости от того, как вы ее используете.
Комментарии приветствуются.
.innerHTML
узлов элементов (тех, для которых оно имеет смысл) является задокументированной функцией HTML5. - person Pointy   schedule 29.06.2012