Nếu tôi có một khoảng thời gian, nói:Làm thế nào để thay đổi nội dung của một phần tử span trong JavaScript
<span id="myspan"> hereismytext </span>
Làm thế nào để sử dụng JavaScript để thay đổi "hereismytext" thành "newtext"?
Nếu tôi có một khoảng thời gian, nói:Làm thế nào để thay đổi nội dung của một phần tử span trong JavaScript
<span id="myspan"> hereismytext </span>
Làm thế nào để sử dụng JavaScript để thay đổi "hereismytext" thành "newtext"?
document.getElementById("myspan").innerHTML="newtext";
EDIT Đối với các trình duyệt hiện đại:
document.getElementById("myspan").textContent="newtext";
document.getElementById('myspan').innerHTML = 'newtext';
Sử dụng innerHTML là SO 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.
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
Sử dụng 'span.appendChild (txt);' thay vào đó! – mumush
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ó" _. –
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';
}
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
Firefox đã triển khai hỗ trợ innerText trong [release 45] (https://developer.mozilla.org/en-US/Firefox/Releases/45). – user3351605
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");
Giống như trong câu trả lời khác, innerHTML và innerText 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
Đố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";
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
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
@bouncingHippo document.getElementById ("myspan"). SetAttribute ("style", "cssvalues"); – Gregoire