Tôi nên sử dụng InternalHTML hay createElement?
Trong Hướng dẫn này, tôi sẽ chỉ cho bạn cách tạo các phần tử mới trong JavaScript và cách thêm các loại nội dung khác nhau Show 1009 lượt xem Bởi. Jacob Đã chỉnh sửa. 2020-09-26 11. 57 Để tạo một phần tử HTML bằng JavaScript đơn giản, chúng ta có thể sử dụng phương thức DOM createElement() hoặc chúng ta có thể chọn chỉ cần chèn HTML trực tiếp Không có cách nào được coi là "tốt nhất" và cách sử dụng nào phụ thuộc chủ yếu vào sở thích cá nhân, phong cách mã hóa và yêu cầu của dự án Một mặt, có thể lập luận rằng các phương thức DOM sẽ an toàn hơn khi sử dụng trong thời gian dài, vì phần tử sẽ tự động bị đóng và việc thêm các thuộc tính cũng ít bị lỗi chính tả và các lỗi khác có xu hướng phát sinh theo thời gian. Mặt khác, cũng có thể lập luận rằng việc sử dụng InternalHTML yêu cầu ít mã hơn và do đó hoạt động nhanh hơn và sạch hơn. Để tạo một phần tử mới bằng các phương thức DOM và điền vào nó một số nội dung, chúng tôi có thể sử dụng như sau let newElement = document.createElement('div'); newElement.innerText = 'Hallo World'; document.body.appendChild(newElement); Đoạn mã trên có thể được giảm thiểu hơn nữa để let newElement = document.createElement('div').innerText = 'Hallo World'; document.body.appendChild(newElement); Thay vào đó, nếu chúng tôi sử dụng InternalHTML, chúng tôi có thể làm những việc như in đậm hoặc in nghiêng văn bản bằng cách sử dụng b và i trong nội dung let newElement = document.createElement('div'); newElement.innerHTML = 'Hallo World'; document.body.appendChild(newElement); Thêm phần tử con vào phần tử mới bằng DOMKhi chúng ta sử dụng các phương thức HTML DOM, chúng ta có thể tạo nhiều phần tử mới bằng cách sử dụng phương thức createElement(), sau đó "nối" các phần tử này vào các phần tử "trừu tượng" khác bằng phương thức appendChild() Ghi chú. Trong trường hợp này, "trừu tượng" đơn giản có nghĩa là chúng ta chưa thêm phần tử vào HTML DOM Trong đoạn mã ví dụ sau, để đơn giản hóa mọi thứ, tôi sẽ chỉ tạo hai phần tử trừu tượng và nối phần tử này với phần tử kia, rồi cuối cùng thêm phần tử vào DOM HTML thực tế // Create the HTML Elements let newDiv = document.createElement('div'); // The parent element let newP = document.createElement('p'); // The child element // Include some text in the paragraph element newP.innerText = 'This is the paragraph'; // Append the child paragraph to the parent div newDiv.appendChild(newP) document.body.appendChild(newDiv); Có thể hiểu được, một số nhà phát triển web thấy dễ dàng hơn khi chỉ sử dụng InternalHTML InternalHTML so với InternalTextSự khác biệt giữa InternalHTML và InternalText là InternalHTML sẽ cho phép bạn làm việc với nội dung HTML thô của một nút, trong khi InternalText chỉ cho phép bạn đặt và truy xuất nội dung văn bản thuần túy của một nút. Khi sử dụng InternalText để truy xuất nội dung, các phần tử HTML sẽ tự động bị loại bỏ, trong khi InternalHTML sẽ giữ nguyên chúng Khi sử dụng InternalText, bạn không phải xử lý các ký tự đặc biệt, vì chúng sẽ được trình duyệt hiểu là chữ. Tuy nhiên, khi sử dụng InternalHTML, bạn sẽ cần thay thế các ký tự bằng các thực thể HTML của chúng. Tôi. e. "" Để chèn HTML vào tài liệu thay vì thay thế nội dung của một phần tử, hãy sử dụng phương thức 4Một chuỗi chứa tuần tự hóa HTML của hậu duệ của phần tử. Đặt giá trị của 3 sẽ xóa tất cả các phần tử con của phần tử và thay thế chúng bằng các nút được tạo bằng cách phân tích cú pháp HTML được cung cấp trong chuỗi htmlString 6 7Bị ném nếu cố gắng đặt giá trị của 3 bằng cách sử dụng chuỗi không phải là HTML được định dạng đúng 9 7Bị ném nếu cố gắng chèn HTML vào một nút có nút gốc là một `;
1Thuộc tính 3 có thể được sử dụng để kiểm tra nguồn HTML hiện tại của trang, bao gồm mọi thay đổi đã được thực hiện kể từ khi trang được tải lần đầuViệc đọc 3 khiến tác nhân người dùng tuần tự hóa đoạn HTML hoặc XML bao gồm các phần tử con của phần tử. Chuỗi kết quả được trả về
Điều này cho phép bạn xem đánh dấu HTML của các nút nội dung của phần tử Ghi chú. Đoạn HTML hoặc XML được trả về được tạo dựa trên nội dung hiện tại của phần tử, do đó, đánh dấu và định dạng của đoạn được trả về có khả năng không khớp với đánh dấu trang gốc Đặt giá trị của 3 cho phép bạn dễ dàng thay thế nội dung hiện có của một phần tử bằng nội dung mớiGhi chú. Đây là câu hỏi nếu chuỗi được chèn có thể chứa nội dung độc hại tiềm ẩn. Khi chèn dữ liệu do người dùng cung cấp, bạn phải luôn cân nhắc sử dụng `;
5 để làm sạch nội dung trước khi chènVí dụ: bạn có thể xóa toàn bộ nội dung của tài liệu bằng cách xóa nội dung của thuộc tính `;
6 của tài liệu
Ví dụ này tìm nạp đánh dấu HTML hiện tại của tài liệu và thay thế các ký tự `;
7 bằng thực thể HTML `;
8, do đó về cơ bản chuyển đổi HTML thành văn bản thô. Điều này sau đó được bao bọc trong một phần tử `;
9. Sau đó, giá trị của 3 được thay đổi thành chuỗi mới này. Do đó, nội dung tài liệu được thay thế bằng màn hình hiển thị toàn bộ mã nguồn của trang `;
chi tiết hoạt độngChính xác thì điều gì sẽ xảy ra khi bạn đặt giá trị là 3?
Đặt giá trị của 3 cho phép bạn thêm nội dung mới vào phần tử hiện cóVí dụ: chúng tôi có thể nối thêm một mục danh sách mới (_______25_______9) vào danh sách hiện có ( 0)HTML
JavaScript
Xin lưu ý rằng việc sử dụng 3 để nối các phần tử HTML (e. g. 2) sẽ dẫn đến việc loại bỏ bất kỳ người nghe sự kiện nào đã đặt trước đó. Nghĩa là, sau khi bạn thêm bất kỳ phần tử HTML nào theo cách đó, bạn sẽ không thể nghe các trình xử lý sự kiện đã đặt trước đóKhông có gì lạ khi thấy 3 được sử dụng để chèn văn bản vào trang web. Điều này có khả năng trở thành phương tiện tấn công trên một trang web, tạo ra rủi ro bảo mật tiềm ẩn
Mặc dù điều này có vẻ giống như một cuộc tấn công kịch bản chéo trang, nhưng kết quả là vô hại. HTML chỉ định rằng một thẻ 4 được chèn với 3Tuy nhiên, có nhiều cách để thực thi JavaScript mà không cần sử dụng các phần tử 4, do đó, vẫn có rủi ro bảo mật bất cứ khi nào bạn sử dụng 3 để đặt các chuỗi mà bạn không kiểm soát được. Ví dụ
Vì lý do đó, bạn nên sử dụng thay vì 3
Cảnh báo. Nếu dự án của bạn là dự án sẽ trải qua bất kỳ hình thức đánh giá bảo mật nào, việc sử dụng 3 rất có thể sẽ khiến mã của bạn bị từ chối. Ví dụ: trong tiện ích mở rộng trình duyệt và gửi tiện ích mở rộng tới addons. mozilla. org, nó có thể bị từ chối trong quá trình xem xét. Vui lòng xem Chèn nội dung bên ngoài vào trang một cách an toàn để biết các phương pháp thay thếVí dụ này sử dụng 3 để tạo cơ chế ghi thông báo vào hộp trên trang web
Hàm 4 tạo đầu ra nhật ký bằng cách lấy thời gian hiện tại từ đối tượng 5 bằng cách sử dụng 6 và tạo một chuỗi có dấu thời gian và nội dung thông báo. Sau đó, thông báo được thêm vào hộp có lớp 7Chúng tôi thêm một phương pháp thứ hai ghi lại thông tin về các sự kiện dựa trên 8 (chẳng hạn như 9, 0 và 1)
Sau đó, chúng tôi sử dụng điều này làm trình xử lý sự kiện cho một số sự kiện chuột trên hộp chứa nhật ký của chúng tôi
HTML khá đơn giản cho ví dụ của chúng tôi 0 2 với lớp 3 chỉ là hộp chứa phục vụ mục đích bố trí, trình bày nội dung với hộp bao quanh. 2 có lớp là 7 là vùng chứa cho chính văn bản nhật kýCSS sau tạo kiểu cho nội dung ví dụ của chúng tôi 1Nội dung kết quả trông như thế này. Bạn có thể xem đầu ra trong nhật ký bằng cách di chuyển chuột vào và ra khỏi hộp, nhấp vào hộp đó, v.v. Tại sao lại sử dụng createElement thay vì InternalHTML?Bạn nên sử dụng createElement nếu bạn muốn giữ các tham chiếu trong mã của mình . InternalHTML đôi khi có thể tạo ra một lỗi khó phát hiện.
Điều gì tốt hơn InternalHTML?Ghi chú. Không giống như InternalHTML, textContent có hiệu suất tốt hơn vì giá trị của nó không được phân tích cú pháp dưới dạng HTML. Vì lý do đó, sử dụng textContent cũng có thể ngăn chặn các cuộc tấn công Cross-Site Scripting (XSS). Không giống như InternalText, textContent không biết về kiểu dáng CSS và sẽ không kích hoạt chỉnh lại dòng.
Khi nào tôi nên sử dụng InternalHTML?innerHTML hữu ích tại bất kỳ lúc nào để chèn thẻ/nội dung HTML mới dưới dạng chuỗi và có thể dễ dàng chuyển hướng đến các thành phần cụ thể trong .
Nhược điểm của việc sử dụng InternalHTML là gì?Nhược điểm của InternalHTML
. Khi chúng tôi đã sử dụng trình xử lý sự kiện thì trình xử lý sự kiện sẽ không tự động được gắn vào các phần tử mới được tạo bởi InternalHTML. It is very slow because as inner HTML already parses the content even we have to parse the content again so that's why it takes time. When we have used the event handlers then the event handlers are not automatically attached to the new elements created by innerHTML. |