Javascript getelementbyid span text

HTML DOM Element innerHTML

The innerHTML property sets or returns the HTML content (inner HTML) of an element.

See Also:

The Differences Between
innerHTML, innerText and textContent

Syntax

Return the innerHTML property:

Set the innerHTML property:

Property Value

Return Value

More Examples

Example

Change the HTML content of two elements:

let text = «Hello Dolly.»;
document.getElementById(«myP»).innerHTML = text;
document.getElementById(«myDIV»).innerHTML = text;

Example

Repeat the HTML content of an element:

Example

Change the HTML content and URL of a link:

The Differences Between
innerHTML, innerText and textContent

The innerHTML property returns:
The text content of the element, including all spacing and inner HTML tags.
The innerText property returns:
Just the text content of the element and all its children, without CSS hidden text spacing and tags, except and elements.
The textContent property returns:
The text content of the element and all descendaces, with spacing and CSS hidden text, but without tags.

HTML Example

JavaScript Examples

let text = document.getElementById(«myP»).innerText;

let text = document.getElementById(«myP»).innerHTML;

let text = document.getElementById(«demo»).textContent;

The innerText property returns:
This element has extra spacing and contains a span element.
The innerHTML property returns:
This element has extra spacing and contains a span element.
The textContent property returns:
This element has extra spacing and contains a span element.

Browser Support

element.innerHTML is supported in all browsers:

Chrome Edge Firefox Safari Opera IE
Yes Yes Yes Yes Yes Yes

Источник

Как изменить текст элемента span в JavaScript

Перед тем, как показывать любую предоставленную пользователем строку таким образом, вы должны сначала убедиться, что она не содержит разметки HTML, в противном случае могут возникнуть проблемы с безопасностью (XSS).

@Gregoire имейте в виду, что ваше решение не работает на ie8 по крайней мере. См. Stackoverflow.com/questions/2119300/…

@gregoire — Как уже отмечали другие, ваш ответ уязвим для XSS. Этот вопрос уже просматривался около 80 тыс. Раз, что означает, что многие люди, вероятно, приняли это решение и могли внести ненужные утечки xss. Не могли бы вы обновить свой ответ, чтобы вместо этого использовать textContent , чтобы новым людям было предложено использовать правильные и безопасные методы?

@Tiddo textContent не поддерживается в IE8 и ниже, и я надеюсь, что вы никогда не будете использовать в своем скрипте напрямую необработанный пользовательский ввод.

Совет: не помешает взглянуть на следующую запись в блоге: Бедный, неправильно понятый innerText Отличная статья, чтобы получить представление о различиях между .innerText и .textContent , производительности, а также о том, что происходит «за кадром». Немного важной информации, IMO. 🙂

Использование innerHTML НЕ РЕКОМЕНДУЕТСЯ. Вместо этого вы должны создать textNode. Таким образом, вы «привязываете» свой текст, и вы, по крайней мере, в этом случае не уязвимы для атаки XSS.

document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!! 
span = document.getElementById("myspan"); txt = document.createTextNode("your cool text"); span.appendChild(txt); 

Дополнительные сведения об этой уязвимости: Cross Site Scripting (XSS) — OWASP

Отредактировано ноябрь 4th 2017:

Изменена третья строка кода в соответствии с предложением @mumush: «используйте appendChild() вместо».
Кстати, согласно @Jimbo Jonny, я думаю, что все должно рассматриваться как пользовательский ввод, применяя принцип безопасности по слоям. Таким образом, вы не встретите никаких сюрпризов.

Хотя вы абсолютно правы в отношении innerHTML требующего осторожности, обратите внимание, что ваше решение использует innerText который не поддерживается в Firefox. quirksmode.org/dom/html Он также использует textContent который не поддерживается в IE8. Вы можете структурировать код, чтобы обойти эти проблемы.

Вопрос ничего не говорит о пользовательском вводе, поэтому общее утверждение о том, что innerHTML не рекомендуется, смешно. Не говоря уже о том, что после дезинфекции все в порядке. Идея, что нужно дезинфицировать пользовательский ввод, ТАК НЕ ОТНОСИТСЯ к этому конкретному вопросу. Самое большее, в конце он заслуживает небольшую заметку, гласящую: «Кстати, если это пользовательский ввод, сначала обязательно выполните дезинфекцию или используйте метод X, который в этом не нуждается» .

Использование appendChild на самом деле не меняет текст, а только добавляет к нему. Используя ваш код здесь, промежуток от исходного вопроса в конечном итоге будет читать «hereismytextyour your text text». Возможно span.innerHTML = «»; тогда appendChild?

document.getElementById('myspan').innerHTML = 'newtext'; 

EDIT: Это было написано в 2014 году. Вероятно, вы больше не заботитесь о IE8 и можете забыть об использовании innerText . Просто используйте textContent и textContent с ним, ура.

Если вы подаете текст, и никакая часть текста не предоставляется пользователем (или другим источником, который вы не контролируете), то установка innerHTML может быть приемлемым:

// * Fine for hardcoded text strings like this one or strings you otherwise // control. // * Not OK for user-supplied input or strings you don't control unless // you know what you are doing and have sanitized the string first. document.getElementById('myspan').innerHTML = 'newtext'; 

Однако, как отмечают другие, если вы не являетесь источником какой-либо части текстовой строки, использование innerHTML может подвергать вас атакам, связанным с innerHTML контента, например, XSS, если вы не будете осторожны, чтобы сначала дезинформировать текст.

Если вы используете ввод от пользователя, вот один из способов сделать это безопасно, одновременно поддерживая совместимость между браузерами:

var span = document.getElementById('myspan'); span.innerText = span.textContent = 'newtext'; 

Firefox не поддерживает innerText и IE8 не поддерживает textContent поэтому вам нужно использовать оба textContent если вы хотите поддерживать совместимость между браузерами.

И если вы хотите избежать переплавов (вызванных innerText ), где это возможно:

var span = document.getElementById('myspan'); if ('textContent' in span) < span.textContent = 'newtext'; >else

Источник

Как изменить текст элемента span с помощью JavaScript?

Хотя старые браузеры могут не знать textContent , не рекомендуется использовать innerHTML , поскольку это создает уязвимость XSS, когда новый текст вводится пользователем (см. Другие ответы ниже для более подробного обсуждения):

//POSSIBLY INSECURE IF NEWTEXT BECOMES A VARIABLE!! document.getElementById("myspan").innerHTML="newtext"; 

как вставить атрибут стиля в span , используя здесь javascript? — person bouncingHippo; 10.09.2012

@bouncingHippo document.getElementById (myspan) .setAttribute (стиль, cssvalues); — person Gregoire; 11.09.2012

@Gregoire имейте в виду, что ваше решение не работает по крайней мере на ie8. См. stackoverflow.com/questions/2119300/ — person MeTTeO; 13.03.2013

должен быть способ объединить эти два ответа в один. это точно такой же ответ. — person john-jones; 18.02.2014

Это не устанавливает текст, а устанавливает HTML, который принципиально отличается. — person Brad; 11.10.2014

@gregoire — Как уже отмечали другие, ваш ответ уязвим для XSS. Этот вопрос уже был просмотрен около 80 тысяч раз, что означает, что многие люди, вероятно, приняли это решение и, возможно, внесли ненужные утечки xss. Не могли бы вы подумать об обновлении своего ответа, чтобы вместо этого использовать textContent , чтобы новым людям было предложено использовать правильные и безопасные методы? — person Tiddo; 21.01.2015

@Tiddo textContent не поддерживается в IE8 и более ранних версиях, и я надеюсь, что вы никогда не будете использовать в своем скрипте непосредственно незарегистрированный пользовательский ввод. — person Gregoire; 21.01.2015

Совет. Не помешает взглянуть на следующую запись в блоге: Плохой, неправильно понятый innerText Отличная статья, чтобы получить представление о различиях между .innerText и .textContent , производительности, а также о том, что происходит« за кулисами ». Здесь есть важная информация, ИМО. 🙂 — person Dennis98; 01.10.2016

спасибо, это помогло мне . для получения длинной строки со значением символа Эмберсона — person Prasanth_Rubyist; 05.12.2017

Использование innerHTML НЕ РЕКОМЕНДУЕТСЯ. Вместо этого вы должны создать textNode. Таким образом, вы «привязываете» свой текст и, по крайней мере, в этом случае, не уязвимы для XSS-атаки.

document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!! 
span = document.getElementById("myspan"); txt = document.createTextNode("your cool text"); span.appendChild(txt); 

Дополнительные сведения об этой уязвимости: Межсайтовый скриптинг (XSS) — OWASP Отредактировано 4 ноября 2017 г .: Изменена третья строка кода в соответствии с предложением @mumush: «вместо этого используйте appendChild ();».
Между прочим, согласно @Jimbo Jonny, я думаю, что все должно рассматриваться как пользовательский ввод, применяя безопасность по слоям принцип. Так вы не встретите никаких сюрпризов.

Хотя вы абсолютно правы, innerHTML требуя осторожности, обратите внимание, что ваше решение использует innerText , который не поддерживается в Firefox. quirksmode.org/dom/html Он также использует textContent , который не поддерживается в IE8. Вы можете структурировать код, чтобы обойти эти проблемы. — person Trott; 02.10.2014

В вопросе ничего не говорится о вводе данных пользователем, поэтому общее заявление о том, что innerHTML не рекомендуется, является нелепым. Не говоря уже о том, что после дезинфекции он все еще в порядке. Идея о том, что нужно дезинфицировать вводимые пользователем данные, ТАК НЕ СВЯЗАНА с этим конкретным вопросом. В лучшем случае следует сделать небольшую заметку в конце, в которой говорится: кстати: если это пользовательский ввод, сначала убедитесь, что вы проделали дезинфекцию или используйте метод X, который в этом не нуждается. — person Jimbo Jonny; 23.01.2016

Кроме того, создание элементов НАМНОГО быстрее, чем использование innerHTML. — person Samuel Rondeau-Millaire; 24.03.2016

Использование appendChild на самом деле не изменяет текст, а только добавляет к нему. Используя ваш код здесь, диапазон из исходного вопроса в конечном итоге приведет к прочтению вашего классного текста hereismytexty. Может быть, span.innerHTML = «»; тогда appendChild? — person ShaneSauce; 09.05.2018

@JimboJonny Когда речь идет о таких вопросах, как этот, которые были просмотрены более 650 000 раз, то, что конкретно задает OP, совершенно не имеет значения. Поэтому я считаю разумным упоминать уязвимость XSS на видном месте в интересах общественной безопасности. — person yeah22; 16.03.2021

РЕДАКТИРОВАТЬ: Это было написано в 2014 году. Вы, вероятно, больше не заботитесь об IE8 и можете забыть об использовании innerText . Просто используйте textContent и покончим с этим, ура. Если вы предоставляете текст, и никакая часть текста не предоставляется пользователем (или каким-либо другим источником, который вы не контролируете), тогда установка innerHTML может быть приемлемой:

// * Fine for hardcoded text strings like this one or strings you otherwise // control. // * Not OK for user-supplied input or strings you don't control unless // you know what you are doing and have sanitized the string first. document.getElementById('myspan').innerHTML = 'newtext'; 

Однако, как отмечают другие, если вы не являетесь источником какой-либо части текстовой строки, использование innerHTML может подвергнуть вас атакам с внедрением контента, таким как XSS, если вы сначала не будете осторожны и не очистите текст должным образом. Если вы используете ввод от пользователя, вот один из способов сделать это безопасно, сохраняя при этом кроссбраузерность:

var span = document.getElementById('myspan'); span.innerText = span.textContent = 'newtext'; 

Firefox не поддерживает innerText , а IE8 не поддерживает textContent , поэтому вам нужно использовать оба, если вы хотите поддерживать кроссбраузерность. И если вы хотите избежать перекомпоновки (вызванной innerText ), где это возможно:

var span = document.getElementById('myspan'); if ('textContent' in span) < span.textContent = 'newtext'; >else

Источник

Читайте также:  Html css wrap links
Оцените статью