JavaScript에서 span 요소의 텍스트를 변경하는 방법


388

스팬이 있으면 다음과 같이 말합니다.

<span id="myspan"> hereismytext </span>

JavaScript를 사용하여 "hereismytext"를 "newtext"로 변경하려면 어떻게합니까?

답변:


636

최신 브라우저의 경우 다음을 사용해야합니다.

document.getElementById("myspan").textContent="newtext";

구형 브라우저는 알 수 없지만 새 텍스트가 사용자 입력 인 경우 XSS 취약점이 발생하므로 textContent사용하지 않는 것이 좋습니다 innerHTML(자세한 내용은 아래의 다른 답변 참조).

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

2
@bouncingHippo document.getElementById ( "myspan"). setAttribute ( "style", "cssvalues");
Gregoire

3
이 두 가지 답변을 하나로 병합하는 방법이 있어야합니다. 정확히 같은 대답입니다.
Hermann Ingjaldsson

7
이것은 텍스트를 설정하지 않고 근본적으로 다른 HTML 을 설정합니다 .
Brad

22
@gregoire-다른 사람들이 이미 지적했듯이 귀하의 답변은 XSS에 취약합니다. 이 질문은 이미 약 8 만 번 보였습니다. 이는 많은 사람들이이 솔루션을 인수했으며 불필요한 xss 누출을 초래했을 수 있음을 의미합니다. textContent새로운 사람들이 적절하고 안전한 방법을 사용하도록 격려하기 위해 대신 사용하도록 답변을 업데이트 할 수 있습니까?
Tiddo

2
@Tiddo textContent는 IE8 이하에서 지원되지 않으므로 스크립트에서 위생 처리되지 않은 사용자 입력을 직접 사용하지 않기를 바랍니다.
Gregoire

75

사용 innerHTML을하는 것이 됩니다 SO 권장되지 . 대신 textNode를 만들어야합니다. 이런 식으로, 당신은 당신의 텍스트를 "바인딩"하고 적어도이 경우 XSS 공격에 취약하지 않습니다.

document.getElementById("myspan").innerHTML = "sometext"; //INSECURE!!

옳은 길:

span = document.getElementById("myspan");
txt = document.createTextNode("your cool text");
span.appendChild(txt);

이 취약점에 대한 자세한 내용 : XSS (Cross Site Scripting)-OWASP

2017 년 11 월 4 일 수정 :

@mumush 제안 에 따라 수정 된 세 번째 코드 줄 : "use appendChild (); 대신 사용". @Jimbo Jonny
에 따르면 Btw는 모든 것을 원칙으로 보안을 적용하여 사용자 입력으로 취급해야한다고 생각합니다. 그렇게하면 놀라움을 느끼지 않을 것입니다.


6
innerHTML주의 가 필요한 것에 대해서는 완전히 맞지만 innerTextFirefox에서는 지원되지 않는 솔루션을 사용합니다 . quirksmode.org/dom/html 또한 textContentIE8에서 지원되지 않는 것도 사용합니다 . 이러한 문제를 해결하기 위해 코드를 구성 할 수 있습니다.
Trott

4
span.appendChild(txt);대신 사용하십시오 !
mumush

34
질문은 사용자 입력에 대해 아무 것도 말하지 innerHTML않으므로 권장하지 않는 담요 설명 은 어리 석습니다. 말할 것도없이 일단 소독 된 후에도 여전히 괜찮습니다. 사용자 입력을 삭제해야한다는 생각은 이 특정 질문과 관련없습니다 . 기껏해야 "btw : 사용자 입력 인 경우 먼저 위생 처리하거나 필요하지 않은 X 메소드를 사용하십시오" 라는 말에 약간의주의 가 필요합니다 .
Jimbo Jonny

또한 innerHTML을 사용하는 것보다 요소를 만드는 것이 훨씬 빠릅니다.
Samuel Rondeau-Millaire

4
appendChild를 사용하면 실제로 텍스트 가 변경 되지 않고 텍스트 만 추가됩니다. 여기에 코드를 사용하면 원래 질문의 범위가 "hereismytextyour cool text"로 표시됩니다. 아마도 span.innerHTML = "";appendChild?
ShaneSauce

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

24

편집 : 이것은 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는 지원하지 않으며 innerTextIE8은 지원하지 않으므로 textContent브라우저 간 호환성을 유지하려면 두 가지를 모두 사용해야합니다.

그리고 가능한 경우 리플 로우를 피하려면 (로 인한 innerText)

var span = document.getElementById('myspan');
if ('textContent' in span) {
    span.textContent = 'newtext';
} else {
    span.innerText = 'newtext';
}

18

나는 Jquery위의 어느 것도 사용 하지 않았지만 왜 그런지 모르겠지만 이것이 효과가 있었다.

 $("#span_id").text("new_value");

7

다른 방법이 있습니다.

var myspan = document.getElementById('myspan');

if (myspan.innerText) {
    myspan.innerText = "newtext";
}
else
if (myspan.textContent) {
        myspan.textContent = "newtext";   
}

innerText 속성은 Safari, Google Chrome 및 MSIE에서 감지됩니다. Firefox의 경우 표준 작업 방법은 textContent를 사용하는 것이었지만 버전 45부터 누군가가 최근에 친절하게 설명했듯이 innerText 속성도 있습니다. 이 솔루션은 브라우저가 이러한 특성 중 하나를 지원하는지 여부를 테스트하고, 해당되는 경우 "새 텍스트"를 지정합니다.

라이브 데모 : 여기


1
Firefox는 릴리스 45 에서 innerText 지원을 구현했습니다 .
user3351605

4

위의 순수한 자바 스크립트 답변 외에도 다음과 같이 jQuery 텍스트 메소드를 사용할 수 있습니다 .

$('#myspan').text('newtext');

span 또는 div 요소의 html 내용 을 가져 오거나 변경하기 위해 답변을 확장 해야하는 경우 다음 을 수행 할 수 있습니다.

$('#mydiv').html('<strong>new text</strong>');

참고 문헌 :

.text () : http://api.jquery.com/text/

.html () : http://api.jquery.com/html/


1

메소드가 지정된 선택기로 첫 번째 요소를 리턴하므로 'myspan'id가 고유하다고 가정하면 querySelector () 메소드를 사용할 수도 있습니다.

document.querySelector('#myspan').textContent = 'newtext';

developer.mozilla



0
document.getElementById("myspan").textContent="newtext";

ID가있는 dom-node를 선택 myspan하고 텍스트 내용을new text


0

넌 할 수있어

 document.querySelector ( "[Span]"). textContent = "content_to_display"; 


내가 준 대답과의 차이점은 무엇입니까?
Addis

-1

이 스팬

<span id="name">sdfsdf</span>

당신은 다음과 같이 갈 수 있습니다 :-

$("name").firstChild.nodeValue = "Hello" + "World";
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.