Если у меня есть промежуток, скажи:
<span id="myspan"> hereismytext </span>
Как я могу использовать JavaScript, чтобы изменить «hereismytext» на «newtext»?
javascript
html
user105033
источник
источник
textContent
вместо него, чтобы новые люди поощрялись к использованию правильных и безопасных методов?Использование innerHTML является SO НЕ РЕКОМЕНДУЕТСЯ . Вместо этого вы должны создать textNode. Таким образом, вы «привязываете» свой текст, и вы, по крайней мере, в этом случае, не уязвимы для атаки XSS.
Правильный путь:
Для получения дополнительной информации об этой уязвимости: межсайтовый скриптинг (XSS) - OWASP
Отредактировано 4 ноября 2017:
Изменена третья строка кода в соответствии с предложением @mumush : «используйте appendChild (); вместо этого».
Кстати, согласно @Jimbo Jonny, я думаю, что все должно рассматриваться как пользовательский ввод с применением принципа безопасности по слоям. Таким образом, вы не встретите никаких сюрпризов.
источник
innerHTML
необходимости соблюдать осторожность, обратите внимание, что ваше решение использует то,innerText
что не поддерживается в Firefox. quirksmode.org/dom/html Он также использует,textContent
который не поддерживается в IE8. Вы можете структурировать код, чтобы обойти эти проблемы.span.appendChild(txt);
вместо этого!innerHTML
которое не рекомендуется, смешно. Не говоря уже о том, что после дезинфекции все еще в порядке. Идея, что нужно дезинфицировать пользовательский ввод, ТАК НЕ ОТНОСИТСЯ к этому конкретному вопросу. Самое большее, в конце он заслуживает небольшую заметку, в которой говорится: «Кстати, если это пользовательский ввод, сначала обязательно выполните дезинфекцию или используйте метод X, который в этом не нуждается» .span.innerHTML = "";
тогда appendChild?источник
РЕДАКТИРОВАТЬ: Это было написано в 2014 году. Возможно, вы больше не заботитесь о IE8 и можете забыть об использовании
innerText
. Просто используйтеtextContent
и покончим с этим, ура.Если вы тот, кто предоставляет текст, а часть текста не предоставлена пользователем (или другим источником, который вы не контролируете), тогда настройка
innerHTML
может быть приемлемой:Однако, как отмечают другие, если вы не являетесь источником какой-либо части текстовой строки, используйте
innerHTML
может подвергнуть вас атакам внедрения контента, таким как XSS, если вы не будете осторожны, чтобы сначала правильно очистить текст.Если вы используете ввод от пользователя, вот один из способов сделать это безопасно, также поддерживая кросс-браузерную совместимость:
Firefox не поддерживает
innerText
и IE8 не поддерживаетtextContent
поэтому вам нужно использовать оба, если вы хотите поддерживать кросс-браузерную совместимость.И если вы хотите избежать повторных выпадений (вызванных
innerText
), где это возможно:источник
Я использую
Jquery
и ничего из вышеперечисленного не помогло, я не знаю почему, но это сработало:источник
Вот еще один способ:
Свойство innerText будет обнаружено Safari, Google Chrome и MSIE. Для Firefox стандартным способом работы было использование textContent, но начиная с версии 45 он также имеет свойство innerText, как кто-то любезно сообщил мне недавно. Это решение проверяет, поддерживает ли браузер какое-либо из этих свойств, и, если да, назначает «новый текст».
Живая демоверсия: здесь
источник
В дополнение к приведенным выше ответам на языке javascript вы можете использовать текстовый метод jQuery следующим образом:
Если вам нужно расширить ответ, чтобы получить / изменить HTML- содержимое элементов span или div, вы можете сделать это:
Ссылки:
.text (): http://api.jquery.com/text/
.html (): http://api.jquery.com/html/
источник
Вы также можете использовать метод querySelector (), предполагая, что идентификатор «myspan» уникален, так как метод возвращает первый элемент с указанным селектором:
developer.mozilla
источник
Как и в другом ответе, innerHTML и innerText не рекомендуются, лучше использовать textContent . Этот атрибут хорошо поддерживается, вы можете проверить это следующим образом: http://caniuse.com/#search=textContent
источник
это выберет dom-узел с id
myspan
и изменит его текстовое содержимое наnew text
источник
Ты можешь сделать
источник
Для этого промежутка
Вы можете пойти так:
источник