Dưới đây là những gì tôi đang cố gắng thực hiện: Khi người dùng sử dụng chuột, bàn phím hoặc chạm để chọn văn bản bên trong "myDiv", tôi muốn có ba đoạn mã HTML kín đáo: HTML trước khi lựa chọn (ở bên trái " của nó), HTML bên trong lựa chọn và HTML sau khi lựa chọn (đến "quyền" của nó). Html nên như nó sẽ xuất hiện với myDiv.innerHTML.Cách lấy HTML trước, bên trong và sau khi chọn (không phải trong vùng văn bản)?
Lựa chọn có thể bắt đầu hoặc kết thúc bên trong một cặp thẻ (nghĩa là lựa chọn được tách biệt không nhất thiết là HTML hợp lệ). Tôi không cần phải đối phó với các tình huống đặc biệt như các yếu tố vị trí tuyệt đối trong vùng lựa chọn; tất cả các lựa chọn mà tôi quan tâm sẽ bị hạn chế đối với một div sẽ chứa các thẻ cơ bản như mạnh, em, ul, ol, h1, hình ảnh và bảng.
Gần nhất tôi đến là sử dụng rangy để chọn lựa và gọi selection.getRangeAt(0).cloneContents()
để nhận HTML lựa chọn. Điều này hoạt động đủ tốt cho đến khi tôi thực hiện lựa chọn không hợp lệ trong sự cô lập và trình duyệt thay đổi HTML của đoạn tài liệu để làm cho nó đánh dấu hợp lệ.
thêm thông tin: Dưới đây là lý do tại sao tôi cần điều này:
tôi đang tạo ra một hệ thống thông tin phản hồi tài liệu, vì vậy tôi cần phải lưu các thông tin lựa chọn một cơ sở dữ liệu để thu hồi sau và pha. Thông thường tôi sẽ lưu vùng chọn bằng cách sử dụng đường dẫn DOM và văn bản đã chọn, nhưng văn bản có thể thay đổi giữa lưu và hoàn nguyên. Ví dụ, tác giả có thể di chuyển toàn bộ các đoạn văn xung quanh, xóa các phần, vv Đường dẫn DOM trở nên khá vô ích sau đó.
Vì vậy, kế hoạch (không hoàn hảo) của tôi là lưu trữ vùng chọn dưới dạng [offset, length, html_snippet]. Đó là "vị trí". Tôi cũng sẽ lưu trữ các đoạn mã html đến trực tiếp trước và sau văn bản đã chọn. Đây là "ngữ cảnh".
Sử dụng kết hợp các dữ liệu này tôi có thể định vị lại văn bản đã chọn ban đầu hầu hết thời gian, ngay cả khi nó đã di chuyển hoặc thay đổi một phần. Khi điều đó không thành công, giao diện người dùng sẽ có cách để giải quyết nó, nhưng tôi muốn điều đó xảy ra càng ít càng tốt.
Superthanks!
Đó là văn bản phải. –
Vâng, tôi đã cố gắng cung cấp càng nhiều thông tin càng tốt, và thay vào đó tôi đã vô cùng tức giận. Vừa nãy, tôi rớt xuống một chút. :) –
Chỉ cần rõ ràng: các đoạn mã HTML bạn cần có chính xác như chúng xuất hiện trong nguồn HTML được gửi tới trình duyệt không? –