Hãy xem qua số DOM Range spec. Bạn có thể có được một Range
từ sự chọn lựa sử dụng trong Firefox sử dụng:
var range = window.getSelection().getRangeAt(0);
Lưu ý rằng một số trình duyệt như Firefox, cho phép nhiều lựa chọn, có thể được truy cập thông qua các phương pháp getRangeAt()
của vùng chọn.
Range
được thể hiện dưới dạng các nút DOM và khoảng bù trong các nút đó. Khi bạn đã có Range
, không đơn giản để thực hiện chính xác những gì bạn muốn, vì ranh giới của phạm vi có thể ở các nút khác nhau ở các cấp khác nhau của cây DOM, vì vậy chỉ cần bao quanh nội dung của Phạm vi bằng thẻ không phải lúc nào cũng có thể. Bạn có thể làm điều gì đó như sau, mặc dù nó sẽ tạo ra một yếu tố khối mới để chứa các nội dung được lựa chọn:
var range = window.getSelection().getRangeAt(0);
var selectionContents = range.extractContents();
var div = document.createElement("div");
div.style.color = "yellow";
div.appendChild(selectionContents);
range.insertNode(div);
khác, hacky, thay thế là sử dụng phương pháp execCommand()
của document
để thay đổi lựa chọn (ví dụ: bằng cách đặt nó thành một màu cụ thể) và sau đó sử dụng document.querySelectorAll
hoặc một số thư viện bộ chọn để chọn các phần tử có màu đó và sau đó áp dụng kiểu cho chúng.
Nguồn
2010-01-26 13:58:12
Hey Bob Fanger đã u tìm thấy bất kỳ giải pháp cho this.If u có u có thể chỉ cho tôi biết. – Warrior
Không, chúng tôi đã chuyển sang TinyMCE, giải quyết vấn đề (doanh nghiệp). PS. TinyMCE có một api tuyệt vời để mở rộng trình soạn thảo htmleditor của họ. Bạn có thể kiểm tra việc thực hiện http://wiki.moxiecode.com/index.php/TinyMCE:API/tinymce.Editor/selection –
Tôi khuyên bạn nên xem xét một số (trình phát triển HTML) WYSIWYG - tinymce, được phát triển tốt ví dụ - để tìm ra. :) –