2009-08-31 43 views

Trả lời

407
document.getElementById("myspan").innerHTML="newtext"; 

EDIT Đối với các trình duyệt hiện đại:

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

Trước khi hiển thị bất kỳ người dùng cung cấp chuỗi theo cách này trước tiên bạn nên kiểm tra xem nó có chứa đánh dấu HTML hay không, nếu không bạn có thể gặp vấn đề về bảo mật (XSS). – pafcu

+0

làm thế nào để bạn chèn một thuộc tính phong cách vào 'span' bằng cách sử dụng javascript ở đây? – bouncingHippo

+1

@bouncingHippo document.getElementById ("myspan"). SetAttribute ("style", "cssvalues"); – Gregoire

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

Sử dụng innerHTMLSO KHÔNG NÊN. Thay vào đó, bạn nên tạo một textNode. Bằng cách này, bạn đang "ràng buộc" văn bản của bạn và bạn không, ít nhất trong trường hợp này, dễ bị tấn công XSS.

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

Cách đúng:

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

Để biết thêm thông tin về lỗ hổng này: Cross Site Scripting (XSS) - OWASP

Sửa 04 Tháng 11 năm 2017:

Modified dòng thứ ba của mã theo @mumush gợi ý: "sử dụng appendChild(); thay vào đó".
Btw, theo @Jimbo Jonny Tôi nghĩ mọi thứ nên được coi là đầu vào của người dùng bằng cách áp dụng Nguyên tắc bảo mật theo lớp. Bằng cách đó bạn sẽ không gặp phải bất kỳ điều bất ngờ nào.

+5

Trong khi bạn hoàn toàn chính xác về 'innerHTML' cần thận trọng, lưu ý rằng giải pháp của bạn sử dụng' innerText' không được hỗ trợ trong Firefox. http://www.quirksmode.org/dom/html/ Nó cũng sử dụng 'textContent' không được hỗ trợ trong IE8. Bạn có thể cấu trúc mã để giải quyết những vấn đề này. – Trott

+4

Sử dụng 'span.appendChild (txt);' thay vào đó! – mumush

+17

Câu hỏi không nói gì về đầu vào của người dùng, do đó, một tuyên bố chăn rằng 'innerHTML' không được khuyến khích là vô lý. Chưa kể nó vẫn còn tốt khi đã khử trùng. Ý tưởng rằng người ta nên khử trùng đầu vào của người dùng là ** SO KHÔNG LIÊN QUAN ** đối với câu hỏi cụ thể này. Hầu hết nó xứng đáng một lưu ý nhỏ ở cuối nói _ "btw: nếu đó là đầu vào của người dùng, hãy chắc chắn để khử trùng đầu tiên hoặc sử dụng phương pháp X mà không cần nó" _. –

19

Nếu bạn là người cung cấp các văn bản và không có phần nào của văn bản được cung cấp bởi người sử dụng (hoặc một số nguồn khác mà bạn không kiểm soát), sau đó thiết lập innerHTML là tốt:

// * 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'; 

Tuy nhiên , như những người khác lưu ý, nếu bạn không phải là nguồn cho bất kỳ phần nào của chuỗi văn bản, việc sử dụng innerHTML có thể khiến bạn bị tấn công nội dung như XSS nếu bạn không cẩn thận để khử trùng văn bản trước.

Nếu bạn đang sử dụng đầu vào từ người sử dụng, đây là một cách để làm điều đó một cách an toàn trong khi vẫn duy trì khả năng tương thích qua trình duyệt:

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

Firefox không hỗ trợ innerText và IE8 không hỗ trợ textContent nên bạn cần sử dụng cả hai nếu bạn muốn duy trì khả năng tương thích giữa các trình duyệt.

Và nếu bạn muốn tránh chỉnh lại dòng (do innerText) nếu có thể:

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

Dưới đây là một cách khác:

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

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

Thuộc tính innerText sẽ được phát hiện bằng Safari, Google Chrome và MSIE . Đối với Firefox, cách làm việc tiêu chuẩn là sử dụng textContent nhưng kể từ phiên bản 45 nó cũng có một thuộc tính innerText, như một người nào đó vui lòng apprised tôi gần đây.Giải pháp này kiểm tra xem trình duyệt có hỗ trợ một trong các thuộc tính này hay không và nếu có, hãy gán "newtext".

Live Demo: here

+1

Firefox đã triển khai hỗ trợ innerText trong [release 45] (https://developer.mozilla.org/en-US/Firefox/Releases/45). – user3351605

8

tôi sử dụng Jquery và không có ở trên giúp, tôi không biết tại sao nhưng điều này làm việc:

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

Giống như trong câu trả lời khác, innerHTMLinnerText không được khuyến nghị, sử dụng tốt hơn textContent. Thuộc tính này cũng được hỗ trợ, bạn có thể kiểm tra xem nó này: http://caniuse.com/#search=textContent

0

Đối với khoảng thời gian này

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

Bạn có thể đi như thế này: -

$("name").firstChild.nodeValue = "Hello" + "World"; 
Các vấn đề liên quan