2011-12-16 35 views
6

Tôi đang làm việc trên trình chỉnh sửa wysiwyg bằng cách sử dụng div [contenteditable = true] và tôi muốn đặt phạm vi lựa chọn từ bù X của Nút A để bù đắp Y của Nút B. Tôi đã làm tốt trên Firefox và IE9, mã này là:Đặt phạm vi lựa chọn trong javascript IE8

var range = document.createRange(); 
range.setStart(selectNode, 0); 
range.setEnd(selectNode, selectNode.textContent.length); 
var sel = window.getSelection(); 
sel.removeAllRanges(); 
sel.addRange(range); 

Nhưng trên IE8, đối tượng phạm vi đó là hoàn toàn khác nhau, nó không có setStart/setEnd, và đối tượng lựa chọn không có chất liệu remove/AddRange. Vui lòng trợ giúp,

Trả lời

4

Hãy xem xét rangy. API lựa chọn/phạm vi trình duyệt chéo của nó. Đó có lẽ là những gì bạn cần.

http://code.google.com/p/rangy/

+3

Rangely-core.js được nén 42kb, đây có thể là một xem xét thiết kế. – Roberto

3

Tôi đã có một vấn đề tương tự tìm thấy polyfill này đó là khá hữu ích đối với tôi, vì tôi không thể sử dụng rangy trong hoàn cảnh của tôi: http://bl.ocks.org/visnup/3456262

Chỉnh sửa: liên kết ban đầu đã thực sự đi chết. Nhìn lại mã cũ của tôi nó trông giống như polyfill không bao giờ làm cho nó vào mã phát hành, chúng tôi chỉ đơn giản là đi cùng phát hiện tính năng như sau:

if(window.getSelection || document.selection){ 

sau đó trên mouseup:

var range; 
if(window.getSelection){ 
    var selection = window.getSelection(); 
    range = selection.getRangeAt(0); 
} else if(document.selection){ 
    range = document.selection.createRange(); 
    if(!range.surroundContents){ 
     // then give up, feature not fully implemented 
    } 
} 
// now do stuff with range (i.e. the selection) 

... và người dùng IE8 do đó không được hỗ trợ cho tính năng đó.

Tuy nhiên tất cả không bị mất: có newer (than my original answer) polyfill on Github có thể hoạt động nếu bạn phải hỗ trợ IE8. Dường như cả hai đều khá gọn gàng và toàn diện.

+1

Giải pháp này chỉ được nén 800 byte và nhắm mục tiêu IE8 theo yêu cầu. Đây có thể là một giải pháp tốt hơn trái ngược với Rangely.js nặng hơn nhiều. – Roberto

+0

Điều này cũng giống như một sự quyến rũ đối với tôi và tôi nghĩ đó là cách tốt nhất để làm điều đó. – AsGoodAsItGets

+0

Liên kết đã chết. Ai đó có thể cung cấp một liên kết mới? –

Các vấn đề liên quan