Tại sao bạn không nên sử dụng InternalHTML?

Tôi biết quan điểm của Jeremy Keith về vấn đề này nhưng tôi vẫn không hiểu tại sao anh ấy và những người khác lại phản đối InternalHTML như vậy. Chắc chắn nó không phải là một phần của tiêu chuẩn (chưa) nhưng cũng không phải là đối tượng XMLHttpRequest (chưa)

Khi bạn có thứ gì đó nhanh hơn và dễ dàng hơn, tại sao bạn lại không sử dụng nó?

Một số người lập luận rằng nó tạo ra khả năng tạo đánh dấu không hợp lệ nhưng không hơn không kém việc tạo ra đánh dấu không hợp lệ để bắt đầu

Có một số lý do khác cho nó?

Cập nhật Jeremy đã làm rõ rằng anh ấy không phản đối nó, mà đúng hơn là nó "nhanh chóng, dễ dàng, độc quyền và nặng tay"

InternalHTML là thuộc tính bạn có thể truy cập như. phong cách và img. src và những gì nó đại diện là "cái gì nằm giữa các thẻ. " Bạn thậm chí có thể chèn các phần tử chứ không chỉ văn bản. Hãy nhớ rằng nếu bạn gán một cái gì đó, giá trị cũ sẽ bị ghi đè, mặc dù việc sử dụng một chút nối chuỗi có thể giữ nguyên nội dung cũ. Điều này ban đầu không chuẩn lắm nhưng nó dễ hơn nhiều so với việc thao tác trên cây DOM. Lưu ý rằng InternalHTML không phải là một hàm nên bạn không nên sử dụng dấu ngoặc đơn

ví dụ

Sử dụng cơ bản

Mật mã

____________


Reset

Nhấn vào

____________

Cài lại


Nội dung bổ sung

Mật mã
Nhấp vào nếu bạn thấy hào hứng
Nhấp vào nút để thực hiện.
Click nếu bạn hào hứng

Thay đổi các yếu tố khác nhau và tương tự với Chức năng

Mật mã

Ưu đãi trong thời gian có hạn. Hai vì một.
Tranh vẽ bậy
Nhấp vào nút để thực hiện.
Vẽ tranh lên tường

Chèn các phần tử (cũng nối thêm)

Mật mã

Bốn điểm bảy năm. tổ tiên của chúng tôi


Hiển thị nguồn

Nhấp vào nút để thực hiện.

Bốn điểm bảy năm. tổ tiên của chúng tôi

Hiển thị nguồn

Quay lại Kho kiến ​​thức

Vì vậy, bạn đã bắt đầu viết mã, bạn biết kiến ​​thức cơ bản về JavaScript và HTML và giờ bạn đã sẵn sàng để bắt đầu duyệt qua DOM. Giả sử bạn đã chọn một thành phần HTML bằng JavaScript và bây giờ bạn muốn thêm một số nội dung vào đó. Các thuộc tính innerHTML, textContent và innerText trong JavaScript đều có thể giúp bạn làm điều này, nhưng bạn chọn thuộc tính nào?

quả sung. 1

Let’s say we have an unordered list made up of empty

  • elements in our HTML, like the one below, and we want to add some plain text content to them using JavaScript.

    quả sung. 2

    Making use of the ids we gave to our

  • elements, we can add content to them in JavaScript using any of the three properties and they will all work, virtually the same.

    quả sung. 3

    Như bạn có thể thấy ở đây, bất kể chúng tôi sử dụng thuộc tính nào, văn bản sẽ xuất hiện trên trang web của chúng tôi dưới dạng mục danh sách

    quả sung. 4

    Vì vậy, điểm có ba thuộc tính là gì nếu tất cả chúng đều làm điều tương tự?

    Cách họ hiển thị nội dung cho trang

    Adding plain text to elements that already exist as we did above is pretty straightforward, but what if we were writing code that was a little more complex. For example, let’s say we hadn’t typed out any

  • tags in our HTML and we wanted to add them in, instead, with JavaScript. Just to throw another wrench into the works, we also want to make our text bold by adding a tag around it. After we’ve selected our
      element via the id of “list” we previously gave to it, we can start adding in our HTML content as well as interpolating our plain text in between. Let’s try using the textContent property to create our list.

      quả sung. 5

      Đây là kết quả xuất hiện trên trang web của chúng tôi

      quả sung. 6

      Điều đó chắc chắn không đúng. Điều gì xảy ra nếu chúng ta hoán đổi 'textContent' với 'innerText'?

      quả sung. 7

      Chà… tôi đoán điều đó tốt hơn một chút, nhưng đó vẫn không phải là thứ chúng tôi đang tìm kiếm. Có lẽ sử dụng 'innerHTML' thay vì 'innerText' sẽ cung cấp cho chúng tôi danh sách in đậm mà chúng tôi muốn

      quả sung. số 8

      Điều đó có vẻ hoàn hảo. Mặc dù người bạn mới của chúng tôi, InternalHTML, đang hoạt động rất tốt ở đây, nhưng nó có một vài nhược điểm khá nghiêm trọng có thể gây ra sự cố cho trang web của chúng tôi

      Hạn chế của InternalHTML

      Lo ngại an ninh mạng

      Tất cả ba thuộc tính (textContent, InternalText và InternalHTML) không chỉ thêm nội dung vào các phần tử trống mà còn thay thế bất kỳ nội dung hiện có nào. Vì InternalHTML có thể thêm nội dung bao gồm các đoạn mã HTML thực tế thay vì các chuỗi đơn giản nên nó có thể gây ra rủi ro bảo mật. Ví dụ: nếu bạn đang sử dụng InternalHTML để tạo biểu mẫu gửi trên trang web của mình và ai đó đã chọn gửi nội dung độc hại, điều đó có thể gây ra sự cố thực sự cho chính bạn cũng như những người dùng khác của trang web hoặc dự án của bạn. Vì lý do này, nếu một trang web hoặc dự án bạn đang thực hiện sắp được xem xét về bảo mật, việc sử dụng InternalHTML có thể khiến trang web hoặc dự án đó không vượt qua được bài kiểm tra và bị từ chối

      Ảnh của BAY. D trên Bapt

      không hiệu quả

      Một nhược điểm khác của InternalHTML là nó chậm và không hiệu quả so với các tùy chọn khác. Giả sử bạn đang làm việc trên một dự án mà bạn cần tạo một phần tử mới cho mỗi mục trong một mảng, mảng mà bạn đã tạo trước đó trong mã của mình hoặc có thể là một mảng từ API có hàng trăm hoặc thậm chí hàng nghìn mục trong đó. Sử dụng InternalHTML, việc tải dữ liệu này có thể mất vài giây. Với tốc độ là một yếu tố quan trọng đối với người dùng trực tuyến ngày nay, những giây đó có thể tăng lên nhanh chóng. Theo một bài báo trên kỹ thuật số. com, 53% người mua sắm trực tuyến sẽ từ bỏ một trang web thương mại điện tử mất hơn 3 giây để tải (Leng, 2022). May mắn thay, có các tùy chọn khác khi thêm các phần tử HTML bằng JavaScript

      Sử dụng cái gì thay thế

      Thêm HTML

      Chúng ta đã thấy cách thêm tất cả các thành phần HTML và chuỗi văn bản cùng một lúc bằng cách sử dụng InternalHTML. Chúng tôi cũng đã vượt qua những hạn chế của việc làm như vậy. Một giải pháp thay thế tốt để làm cho mã của chúng ta an toàn và hiệu quả là tách riêng các tác vụ này

      quả sung. 9

      Trong hình trên, chúng tôi đã nhập lời chào của mình trong một mảng có tên là 'lời chào. ' Sau đó, chúng tôi đã tạo một vòng lặp 'forEach' cho mảng này và đối với mỗi mục trong mảng, chúng tôi yêu cầu nó tạo một thẻ li mới, tạo một thẻ mạnh mới, chọn phần tử ul của chúng tôi, nối một thẻ li mới được tạo vào . Chà, nghe có vẻ nhiều, nhưng chia nhỏ ra, chúng ta chỉ đơn giản là tạo bất kỳ phần tử HTML mong muốn nào, chọn nơi chúng ta muốn, nối chúng vào vị trí đó và thêm vào văn bản của chúng ta

      InternalText vs TextContent

      If you don’t need to insert any HTML, you can go straight to selecting which element you want to add content to, and entering your text with innerText or textContent as we did in fig. 3. Generally speaking, you’ll want to opt for innerText because textContent can produce messy code. For example, let’s say we had written some text in our HTML under a

    • tag, and we spread it out over three separate lines.

      quả sung. 10

      Sau đó, chúng tôi đã sử dụng InternalText và textContent trong JavaScript để điều khiển. đăng nhập văn bản đó vào bảng điều khiển của chúng tôi

      quả sung. 11

      Chúng ta có thể thấy bên dưới, InternalText sẽ hiển thị nội dung trong bảng điều khiển tương tự như cách nó hiển thị trên trang, trong khi textContent sẽ là bảng điều khiển. ghi cùng một nội dung tương tự như cách nội dung ban đầu được nhập vào HTML, với nhiều khoảng trống hơn

      quả sung. 12Kết luận

      Do tính đơn giản của nó, InternalHTML có thể hấp dẫn để sử dụng, tuy nhiên, vì nó có thể làm chậm quá trình tải trang web của bạn và tạo ra rủi ro bảo mật, nên tốt nhất là tránh sử dụng InternalHTML và tách biệt các tác vụ tạo thành phần và thêm văn bản. Mặc dù cả textContent và InternalText sẽ thêm văn bản bạn muốn một cách an toàn, nhưng InternalText sẽ hiển thị nội dung rõ ràng hơn trong bảng điều khiển của bạn nên nó thường được ưu tiên hơn. Tôi hy vọng thông tin này đã giúp làm rõ sự khác biệt giữa InternalHTML, textContent và InternalText, cũng như giúp bạn quyết định nên sử dụng cái nào. Mã hóa vui vẻ

      nguồn

      "Yếu tố. bên trongHTML. ” API web. MDN, https. // nhà phát triển. mozilla. org/en-US/docs/Web/API/Element/innerHTML

      Leng, Allen. “Cứ 2 khách truy cập thì có 1 người từ bỏ một trang web mất hơn 6 giây để tải. " Điện tử. com, kỹ thuật số. com, 19 tháng 4. 2022, https. //điện tử. com/1-trong-2-khách-từ-bỏ-trang-web-mất-hơn-6-giây-để-tải/#. ~. text=Tuy nhiên%2C%20khi%20it%20đến%20đến,sẽ%20đi%20sau%20one%20giây

      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.

      Khi nào bạn 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 .

      Bạn nên sử dụng InternalHTML hay InternalText?

      Thuộc tính InnerText html mã hóa nội dung, biến Nếu muốn chèn các thẻ HTML, bạn cần sử dụng InnerHTML . Chỉ để rõ ràng. Điều này chỉ áp dụng khi THIẾT LẬP một giá trị. Khi bạn NHẬN được giá trị, các thẻ HTML sẽ bị xóa và bạn nhận được văn bản thuần túy.

      Đ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.