'InternalText' hoạt động trong IE, nhưng không phải trong Firefox


289

Tôi có một số mã JavaScript hoạt động trong IE có chứa các mục sau:

myElement.innerText = "foo";

Tuy nhiên, có vẻ như thuộc tính 'InternalText' không hoạt động trong Firefox. Có một số Firefox tương đương? Hoặc có một thuộc tính trình duyệt chéo, chung hơn có thể được sử dụng?


3
Điều này sẽ làm điều đó myEuity.innerHTML = "foo";
stefita

Điều đó sẽ thay thế TẤT CẢ HTML trong đối tượng bằng giá trị được cung cấp.
Ngựa vằn OMG

24
Đây là nơi các thư viện như jQuery làm cho cuộc sống dễ dàng hơn khi họ xử lý các vấn đề không nhất quán trên trình duyệt như thế này bằng cách cho phép bạn sử dụng một khung công tác tiêu chuẩn.
Dan Diplo

Nhưng vẫn có thể phù hợp nếu không có HTML để chăm sóc.
Alex Polo

21
Vì vậy, hãy cho chúng tôi biết cách sử dụng thay thế trình duyệt chéo này thay vì chỉ nói rằng nó có thể (không mang tính xây dựng).
SasQ

Câu trả lời:


249

Firefox sử dụng thuộc tính textContent tuân thủ W3C .

Tôi đoán Safari và Opera cũng hỗ trợ khách sạn này.



2
@Bob Kể từ ngày 22 tháng 2 năm 2016 vẫn chưa có.
krillgar

@krillgar Nó được lên lịch cho Firefox 45, dự kiến ​​sẽ được phát hành vào ngày 8 tháng 3. Nó đã có trong phiên bản beta hiện tại và đã ở cực quang được một thời gian. Điều này thực tế có nghĩa là bạn có thể bắt đầu phát triển các trang web innerTextchỉ bằng cách sử dụng và mong đợi nó hoạt động (với các quirks có thể) trên tất cả các trình duyệt hiện tại trong tương lai gần và IE cũ cũng vậy.
Bob

1
FTR: innerTextsâu sắc khác nhau từ textContent, và thực sự là rất hữu ích (đáng ngạc nhiên từ một trình duyệt IE đứa coi ...): innerTextcố gắng để đưa ra một xấp xỉ của thế văn bản được thực sự được trình bày trong trình duyệt, hoàn toàn không giống textContent, mà lợi nhuận chỉ là về các tag- tước nguồn đánh dấu , thêm ít giá trị hoặc thậm chí có thêm vấn đề (như mất ranh giới từ).
Sz.

InternalText vẫn không hỗ trợ vào năm 2019 trên phiên bản 64.
Tony Dong

285

Cập nhật : Tôi đã viết một bài đăng trên blog chi tiết tất cả sự khác biệt tốt hơn nhiều.


Firefox sử dụng tiêu chuẩn W3C Node::textContent, nhưng hành vi của nó khác "hơi" so với độc quyền của MSHTML innerText(cũng được sao chép bởi Opera, một thời gian trước, trong số hàng chục tính năng MSHTML khác).

Trước hết, textContentđại diện khoảng trắng khác với innerTextmột. Thứ hai, và quan trọng hơn, textContent bao gồm tất cả các nội dung thẻ SCRIPT , trong khi InternalText thì không.

Để làm cho mọi thứ trở nên thú vị hơn, Opera - bên cạnh việc thực hiện tiêu chuẩn textContent- đã quyết định thêm MSHTML innerText nhưng thay đổi nó thànhtextContent - nghĩa là bao gồm các nội dung SCRIPT (trên thực tế textContentinnerTexttrong Opera dường như tạo ra kết quả giống hệt nhau, có lẽ chỉ là bí danh với nhau) .

textContentlà một phần của Nodegiao diện, trong khi đó innerTextlà một phần của HTMLElement. Điều này, ví dụ, có nghĩa là bạn có thể "truy xuất" textContentnhưng không phải innerTexttừ các nút văn bản:

var el = document.createElement('p');
var textNode = document.createTextNode('x');

el.textContent; // ""
el.innerText; // ""

textNode.textContent; // "x"
textNode.innerText; // undefined

Cuối cùng, Safari 2.x cũng có lỗi innerTexttriển khai. Trong Safari, innerTextchỉ hoạt động đúng nếu một phần tử không bị ẩn (thông qua style.display == "none") cũng không mồ côi khỏi tài liệu. Nếu không, innerTextkết quả là một chuỗi trống.

Tôi đã chơi với sự textContenttrừu tượng (để khắc phục những thiếu sót này), nhưng hóa ra nó khá phức tạp .

Đặt cược tốt nhất của bạn là đầu tiên xác định các yêu cầu chính xác của bạn và làm theo từ đó. Nó thường có thể chỉ đơn giản là tước thẻ tắt của innerHTMLcủa một phần tử, hơn là đối phó với tất cả các khả năng textContent/ innerTextđộ lệch.

Tất nhiên, một khả năng khác là đi bộ cây DOM và thu thập các nút văn bản theo cách đệ quy.


35
Chrome cũng hỗ trợ InternalText, vì vậy có vẻ như Firefox là trình duyệt chính duy nhất KHÔNG hỗ trợ nó. Và IE là trình duyệt duy nhất KHÔNG hỗ trợ textContent.
mike nelson

7
@mike - Nhưng có vẻ như nó sử dụng chậm hơn 60 lần innerTexttrong Chrome. jsperf.com/text-content/3
gblazex

8
textContenthiện được hỗ trợ trong IE9 +, nhưng Firefox vẫn không hỗ trợ innerText(mặc dù họ đã thêm IE giới thiệu outerHTMLchỉ vài ngày trước).
kangax

1
Đối với những người vẫn cần phải hỗ trợ IE8, có một khá hoàn chỉnh Node.textContentshim cơ bản dở dang ở đây: github.com/usmonster/aight/blob/node-textcontent-shim/js/... (hy vọng sẽ sớm được đưa vào aight ).
Noyo


83

Nếu bạn chỉ cần đặt nội dung văn bản và không truy xuất, đây là phiên bản DOM tầm thường mà bạn có thể sử dụng trên bất kỳ trình duyệt nào; nó không yêu cầu phần mở rộng bên trong IE hoặc thuộc tính textContent DOM Cấp 3.

function setTextContent(element, text) {
    while (element.firstChild!==null)
        element.removeChild(element.firstChild); // remove all existing content
    element.appendChild(document.createTextNode(text));
}

Trừ khi JavaScript có toán tử "! ==", tôi nghĩ toán tử đó trong dòng thứ hai chỉ nên là "! =".
RexE

23
@RexE: JavaScript không có !==toán tử, nghịch đảo ===. So sánh nhạy cảm loại được sử dụng bởi ===/ !==thường thích hợp hơn so với so sánh lỏng ==/ !=.
bobince

Trong trình thám hiểm internet, điều này không hoạt động để đặt văn bản của các thẻ script (tôi đang sử dụng chúng cho một mẫu). Bạn đã đặt `scriptTagEuity.text = 'mẫu của tôi {{here}}';
Christopher Tarquini

Tôi đã phải suy nghĩ rất nhiều để hiểu lý do tại sao bạn sử dụng vòng lặp (và tôi sẽ loại bỏ !==nullhoàn toàn bằng cách này) thay vì chỉ thay thế vòng lặp bằng element.innerHTML=''(được suy đoán để thực hiện công việc chính xác như vòng lặp và sau đó tôi nhớ .. .: các bảng trong (di sản-) IE ... ericvasilik.com/2006/07/code-karma.html Tôi có thể đề xuất thêm một mô tả ngắn về 'ẩn' và hầu như không bao giờ ghi lại 'tác dụng phụ' của việc createTextNodethay thế amp lt và gt đến các thực thể ký tự html tương ứng của chúng? Liên kết đến hành vi chính xác của nó sẽ rất tuyệt!
GitaarLAB


22

Theo câu trả lời của Prakash K, Firefox không hỗ trợ thuộc tính InternalText. Vì vậy, bạn có thể chỉ cần kiểm tra xem tác nhân người dùng có hỗ trợ thuộc tính này hay không và tiến hành như sau:

function changeText(elem, changeVal) {
    if (typeof elem.textContent !== "undefined") {
        elem.textContent = changeVal;
    } else {
        elem.innerText = changeVal;
    }
}

2
'textContent' trong elem sẽ đơn giản hơn
Jamie Pate

if (elem.textContent! = null) cũng sẽ dễ dàng hơn!
Elmue

14

Một dòng Javascript thực sự đơn giản có thể có được văn bản "không gắn thẻ" trong tất cả các trình duyệt chính ...

var myElement = document.getElementById('anyElementId');
var myText = (myElement.innerText || myElement.textContent);

2
Có một vấn đề với vấn đề đó (ít nhất là trong IE8): Nếu InternalText là chuỗi rỗng và textContent không được xác định thì (myEuity.innerText || myEuity.textContent) sẽ không được xác định.
Magnus

1
Cũng như lỗi được ghi nhận bởi @Magnus, cũng đáng lưu ý rằng thực tế là có sự khác biệt đáng kể về cách thức textContentinnerTextbáo cáo khoảng trắng có thể quan trọng đối với một số trường hợp sử dụng.
Đánh dấu Amery

2
Đơn giản chỉ cần thêm một cái khác ||, tức là: var myText = (myElement.innerText || myElement.textContent || "") ;để vượt qua giá trị không xác định.
PeterM

6

Lưu ý rằng thuộc Element::innerTexttính sẽ không chứa văn bản đã bị ẩn theo kiểu CSS " display:none" trong Google Chrome (đồng thời, nó sẽ bỏ nội dung đã bị che bởi các kỹ thuật CSS khác (bao gồm cỡ chữ: 0, màu: trong suốt và một vài hiệu ứng tương tự khác làm cho văn bản không được hiển thị theo bất kỳ cách hiển thị nào).

Các thuộc tính CSS khác cũng được xem xét:

  • Đầu tiên, kiểu "display:" của các phần tử bên trong được phân tích cú pháp để xác định xem nó có phân định nội dung khối hay không (chẳng hạn như "display: block", mặc định của các phần tử khối HTML trong biểu định kiểu dựng sẵn của trình duyệt và có hành vi không bị ghi đè bởi phong cách CSS của riêng bạn); nếu vậy một dòng mới sẽ được chèn vào giá trị của thuộc tính InternalText. Điều này sẽ không xảy ra với thuộc tính textContent.
  • Các thuộc tính CSS tạo nội dung nội tuyến cũng sẽ được xem xét: ví dụ: phần tử nội tuyến <br \>tạo ra một dòng mới nội tuyến cũng sẽ tạo ra một dòng mới trong giá trị của InternalText.
  • Kiểu "display: inline" không tạo ra dòng mới nào trong textContent hoặc InternalText.
  • Kiểu "display: table" tạo ra các dòng mới xung quanh bảng và giữa các hàng của bảng, nhưng "display: cell-cell" sẽ tạo ra một ký tự lập bảng.
  • Thuộc tính "vị trí: tuyệt đối" (được sử dụng với display: block hoặc display: inline, không thành vấn đề) cũng sẽ khiến ngắt dòng được chèn vào.
  • Một số trình duyệt cũng sẽ bao gồm một khoảng cách duy nhất giữa các nhịp

Nhưng Element::textContentvẫn sẽ chứa TẤT CẢ nội dung của các thành phần văn bản bên trong một cách độc lập với CSS được áp dụng ngay cả khi chúng không nhìn thấy được. Và không có dòng mới hoặc khoảng trắng sẽ được tạo trong textContent, mà chỉ bỏ qua tất cả các kiểu và cấu trúc và nội tuyến / khối hoặc các loại phần tử bên trong.

Thao tác sao chép / dán bằng cách chọn chuột sẽ loại bỏ văn bản ẩn ở định dạng văn bản đơn giản được đặt trong bảng tạm, do đó, nó sẽ không chứa mọi thứ trong đó textContent, mà chỉ chứa những gì bên trong innerText(sau khi tạo khoảng trắng / dòng mới như trên) .

Cả hai thuộc tính sau đó được hỗ trợ trong Google Chrome, nhưng nội dung của chúng có thể khác nhau. Các trình duyệt cũ hơn vẫn được bao gồm trong innetText mọi thứ như textContent hiện có (nhưng hành vi của chúng liên quan đến việc tạo ra các khoảng trắng / dòng mới không nhất quán).

jQuery sẽ giải quyết những mâu thuẫn này giữa các trình duyệt bằng cách sử dụng phương thức ".text ()" được thêm vào các phần tử được phân tích cú pháp mà nó trả về thông qua truy vấn $ (). Trong nội bộ, nó giải quyết những khó khăn bằng cách xem xét HTML DOM, chỉ hoạt động với cấp độ "nút". Vì vậy, nó sẽ trả về một cái gì đó trông giống như textContent tiêu chuẩn.

Thông báo trước là phương thức jQuery này sẽ không chèn thêm bất kỳ khoảng trắng hoặc ngắt dòng nào có thể hiển thị trên màn hình do các phần phụ (như <br />) của nội dung gây ra.

Nếu bạn thiết kế một số tập lệnh cho khả năng truy cập và biểu định kiểu của bạn được phân tích cú pháp để hiển thị phi âm thanh, chẳng hạn như các plugin được sử dụng để giao tiếp với trình đọc chữ nổi, công cụ này nên sử dụng textContent nếu nó phải bao gồm các dấu chấm câu cụ thể được thêm vào trong các nhịp được tạo kiểu "display: none" và thường được bao gồm trong các trang (ví dụ: siêu ký tự / đăng ký), nếu không, phần bên trong sẽ rất khó hiểu trên đầu đọc chữ nổi.

Các văn bản bị ẩn bởi các thủ thuật CSS hiện thường bị các công cụ tìm kiếm lớn bỏ qua (cũng sẽ phân tích CSS các trang HTML của bạn và cũng sẽ bỏ qua các văn bản không có màu tương phản trên nền) bằng cách sử dụng trình phân tích cú pháp HTML / CSS và thuộc tính DOM "InternalText" chính xác như trong các trình duyệt trực quan hiện đại (ít nhất nội dung vô hình này sẽ không được lập chỉ mục để văn bản ẩn có thể được sử dụng như một mẹo để buộc đưa một số từ khóa vào trang để kiểm tra nội dung của nó); nhưng văn bản ẩn này sẽ được hiển thị trong trang kết quả (nếu trang vẫn đủ điều kiện từ chỉ mục được đưa vào kết quả), sử dụng thuộc tính "textContent" thay vì HTML đầy đủ để loại bỏ các kiểu và tập lệnh bổ sung.

NẾU bạn chỉ định một số văn bản đơn giản trong bất kỳ một trong hai thuộc tính này, điều này sẽ ghi đè lên đánh dấu bên trong và các kiểu được áp dụng cho nó (chỉ phần tử được gán sẽ giữ kiểu, thuộc tính và kiểu), do đó cả hai thuộc tính sẽ chứa cùng một nội dung . Tuy nhiên, một số trình duyệt giờ đây sẽ không còn tôn trọng việc ghi vào bên trong nữa và sẽ chỉ cho phép bạn ghi đè lên thuộc tính textContent (bạn không thể chèn đánh dấu HTML khi ghi vào các thuộc tính này, vì các ký tự đặc biệt HTML sẽ được mã hóa chính xác bằng cách sử dụng tham chiếu ký tự số để xuất hiện theo nghĩa đen , nếu sau đó bạn đọc innerHTMLtài sản sau khi chuyển nhượng innerTexthoặc textContent.


1
Trên thực tế, "cỡ chữ: 0", "màu: trong suốt", "độ mờ: 0", "văn bản thụt lề: -9999px", v.v ... đều được bao gồm trong Chrome / WebKit innerText. Trong các thử nghiệm của tôi, chỉ "hiển thị: không" và "hiển thị: ẩn" được bỏ qua.
kangax 14/03/2015

5
myElement.innerText = myElement.textContent = "foo";

Chỉnh sửa (cảm ơn Mark Amery cho nhận xét bên dưới): Chỉ thực hiện theo cách này nếu bạn biết ngoài nghi ngờ hợp lý rằng sẽ không có mã nào dựa vào việc kiểm tra sự tồn tại của các thuộc tính này, như (ví dụ) jQuery làm. Nhưng nếu bạn đang sử dụng jQuery, có lẽ bạn chỉ cần sử dụng hàm "text" và thực hiện $ ('# myEuity'). Text ('foo') như một số câu trả lời khác hiển thị.


4
-1; đây là một ý tưởng tồi. Nó cực kỳ phổ biến đối với mã - bao gồm mã trong các thư viện như jQuery - để kiểm tra sự tồn tại của innerTexthoặc textContentcác thuộc tính để quyết định sử dụng mã nào. Bằng cách đặt cả hai thành một chuỗi, bạn sẽ khiến mã của người khác tác động lên phần tử phát hiện nhầm rằng trình duyệt hỗ trợ cả hai thuộc tính; do đó, mã đó chịu trách nhiệm cho hành vi sai.
Đánh dấu Amery

JQuery $ ('# myEuity'). Val () hoạt động cho trình duyệt chéo.
Tony Dong

4

innerTextđã được thêm vào Firefox và sẽ có sẵn trong bản phát hành FF45: https://ormszilla.mozilla.org/show_orms.cgi?id=264412

Một thông số dự thảo đã được viết và dự kiến ​​sẽ được đưa vào tiêu chuẩn sống HTML trong tương lai: http://rocallahan.github.io/innerText-spec/ , https://github.com/whatwg/html/issues/ 465

Lưu ý rằng hiện tại các triển khai Firefox, Chrome và IE đều không tương thích. Trong tương lai, có lẽ chúng ta có thể mong đợi Firefox, Chrome và Edge hội tụ trong khi IE cũ vẫn không tương thích.

Xem thêm: https://github.com/whatwg/compat/issues/5


Có một polyfill có sẵn?
tớ-inc

1
@user Nó thực sự phụ thuộc vào những gì bạn cần. Nếu bạn không cần hỗ trợ các phiên bản Firefox cũ hơn và không quan tâm đến những khác biệt nhỏ trong triển khai, chỉ cần sử dụng innerText. Nếu textContentlà một dự phòng chấp nhận được và bạn cần hỗ trợ Fx cũ, sau đó sử dụng (innerText || textContent). Nếu bạn muốn triển khai giống hệt nhau trên tất cả các trình duyệt, tôi không tin có bất kỳ polyfill cụ thể nào cho việc này nhưng một số khung (ví dụ jQuery) có thể đã triển khai một cái gì đó tương tự - hãy tham khảo các câu trả lời khác trên trang này.
Bob

1
Chức năng của innerText, đó là: Văn bản hiển thị trên một trang, trong Firefox> = 38 (đối với một addon) Ít nhất, các <script>thẻ phải được bỏ qua hoàn toàn. jQuery $('#body').text()không làm việc cho tôi. Nhưng như một cách giải quyết innerText || textContentlà ok. Cảm ơn bạn.
tớ-inc

@user Yea, nếu bạn cần hỗ trợ Fx 38 thì câu trả lời này không thực sự được áp dụng. Bây giờ bạn sẽ phải sống với những hạn chế / khác biệt textContent.
Bob

1

Những gì như thế này?

//$elem is the jQuery object passed along.

var $currentText = $elem.context.firstChild.data.toUpperCase();

** Tôi cần phải làm cho chữ hoa của tôi.


1
Giải pháp tào lao; điều này không hoạt động nếu phần tử chứa bất cứ thứ gì nhiều hơn một nút văn bản.
Đánh dấu Amery


0

Điều này đã được kinh nghiệm của tôi với innerText, textContent, innerHTML, và giá trị:

// elem.innerText = changeVal;  // works on ie but not on ff or ch
// elem.setAttribute("innerText", changeVal); // works on ie but not ff or ch
// elem.textContent = changeVal;  // works on ie but not ff or ch
// elem.setAttribute("textContent", changeVal);  // does not work on ie ff or ch
// elem.innerHTML = changeVal;  // ie causes error - doesn't work in ff or ch
// elem.setAttribute("innerHTML", changeVal); //ie causes error doesn't work in ff or ch
   elem.value = changeVal; // works in ie and ff -- see note 2 on ch
// elem.setAttribute("value", changeVal); // ie works; see note 1 on ff and note 2 on ch

tức là = internet explorer, ff = firefox, ch = google chrome. lưu ý 1: ff hoạt động cho đến khi giá trị bị xóa bằng backspace - xem ghi chú của Ray Vega ở trên. lưu ý 2: hoạt động phần nào trong chrome - sau khi cập nhật, nó không thay đổi, sau đó bạn nhấp đi và nhấp lại vào trường và giá trị xuất hiện. Tốt nhất của lô là elem.value = changeVal; mà tôi đã không bình luận ở trên.


1
Chỉ tôi thôi à ? hoặc bỏ qua abosolutly bỏ qua câu hỏi OP? anh ấy đã yêu cầu InternalText / textContent và bạn đang nói về đầu vào.
Mất trí

Câu trả lời này rất khó đọc. Mặt khác, tôi không tin rằng nội dung có đủ giá trị để làm cho nó trở nên đáng giá.
Mark Amery

-1

Chỉ cần đăng lại từ các bình luận dưới bài viết gốc. InternalHTML hoạt động trong tất cả các trình duyệt. Cảm ơn stefita.

myEuity.innerHTML = "foo";


1
-1; innerHTMLkhông phải là sự thay thế thích hợp cho textContent/ innerTexttrừ khi bạn có thể chắc chắn rằng văn bản bạn đang gán không chứa bất kỳ thẻ hoặc cú pháp HTML nào khác. Đối với bất kỳ dữ liệu nào được cung cấp bởi người dùng, bạn chắc chắn không có sự đảm bảo đó. Đẩy mạnh cách tiếp cận này mà không có sự cảnh báo đó là nguy hiểm vì nó có thể dẫn đến các lỗ hổng bảo mật XSS . Với rất nhiều cách tiếp cận an toàn có sẵn, không có lý do gì để xem xét phương pháp này.
Đánh dấu Amery

Đánh dấu, sự hiểu biết của tôi là InternalHTML là một cách bình thường để ghi dữ liệu vào các phần tử html như div, span, p. Tôi sử dụng nó để xử lý dữ liệu JSON trả về. Nó cũng ở trong JQuery ...
Leonid Alzhin

1
Nếu bạn nhận được một chuỗi tùy ý từ một phản hồi JSON và gán nó cho một phần tử .innerHTML, mã của bạn bị hỏng và bạn có khả năng dễ bị tổn thương với XSS. Điều gì xảy ra nếu chuỗi đó là "<script>alert(1)</script>"?
Đánh dấu Amery

1
@MarkAmery: HTML5 chỉ định rằng <script>thẻ được chèn qua innerHTMLkhông nên thực thi. Nhưng điều đó không bảo vệ các trình duyệt cũ hơn. Ngoài ra, HTML5 innerHTMLsẽ KHÔNG bảo vệ ví dụ "<img src='x' onerror='alert(1)'>".
GitaarLAB

-1

tìm thấy ở đây:

<!--[if lte IE 8]>
    <script type="text/javascript">
        if (Object.defineProperty && Object.getOwnPropertyDescriptor &&
            !Object.getOwnPropertyDescriptor(Element.prototype, "textContent").get)
          (function() {
            var innerText = Object.getOwnPropertyDescriptor(Element.prototype, "innerText");
            Object.defineProperty(Element.prototype, "textContent",
              { // It won't work if you just drop in innerText.get
                // and innerText.set or the whole descriptor.
                get : function() {
                  return innerText.get.call(this)
                },
                set : function(x) {
                  return innerText.set.call(this, x)
                }
              }
            );
          })();
    </script>
<![endif]-->

Một số lời giải thích sẽ tốt đẹp! Ngoài ra, có một số shit lạ ở đây; tại sao sử dụng nhận xét có điều kiện để hạn chế thực thi đối với IE> = 8, thay vì chỉ nhắm mục tiêu IE 8, khi IE> = 9 hỗ trợ textContentnguyên bản ? Cũng đáng lưu ý rằng vì innerTexttextContentcó các hành vi khác nhau, mã ở trên không phải là một textContentshim trung thành - điều này có thể quan trọng, nhưng không nhất thiết phải rõ ràng!
Đánh dấu Amery

cảm ơn bạn đã chỉ ra lỗ hổng, nó được nhắm đến là IE <= 8
simonarame

-2

Cũng có thể mô phỏng innerTexthành vi trong các trình duyệt khác:

 if (((typeof window.HTMLElement) !== "undefined") && ((typeof HTMLElement.prototype.__defineGetter__) !== "undefined")) {
     HTMLElement.prototype.__defineGetter__("innerText", function () {
         if (this.textContent) {
             return this.textContent;
         } else {
             var r = this.ownerDocument.createRange();
             r.selectNodeContents(this);
             return r.toString();
         }
     });
     HTMLElement.prototype.__defineSetter__("innerText", function (str) {
         if (this.textContent) {
             this.textContent = str;
         } else {
             this.innerHTML = str.replace(/&/g, '&amp;').replace(/>/g, '&gt;').replace(/</g, '&lt;').replace(/\n/g, "<br />\n");
         }
     });
 }

Chỉ cần tìm kiếm các vấn đề ngoài đỉnh đầu của tôi, setter đã bị hỏng prevì nó sẽ nhân đôi các dòng mới. Tôi nghi ngờ có nhiều sai ở đây.
Đánh dấu Amery
Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.