Lưu ý rằng thuộc Element::innerText
tí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::textContent
vẫ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 innerHTML
tài sản sau khi chuyển nhượng innerText
hoặc textContent
.