2008-08-13 30 views
10

Một trong những điều tôi muốn làm trong ứng dụng dựa trên trình duyệt của mình là cho phép người dùng chọn một số văn bản (không phải trong văn bản <textarea>, chỉ !) và ứng dụng của tôi bật lên một thanh công cụ nhỏ, sau đó có thể tương tác với thanh công cụ tiếp theo (trong trường hợp của tôi, thêm chú thích).Nhận văn bản được chọn trong trình duyệt, nền tảng

Tôi đã tìm thấy rất nhiều thứ trên google dường như tập trung vào việc viết trình soạn thảo WYSIWYG, nhưng đó không phải là những gì tôi muốn và hầu hết trong số đó hoạt động trong IE nhưng không phải trong FF2 hoặc 3. Lý tưởng nhất , Tôi muốn một số chức năng có thể trả về văn bản hiện đang được chọn trong cửa sổ trình duyệt hoạt động trong IE7 (và 6 nếu có thể), FireFox 2 & 3 và Safari 2. Nếu nó hoạt động trong Opera, đó sẽ là một phần thưởng, nhưng nó không phải là một yêu cầu.

Bất kỳ ai có chức năng thực hiện việc này? Hoặc một ý tưởng về nơi để bắt đầu?

Trả lời

1

Introduction to Range có một số chi tiết về cách các trình duyệt khác nhau cung cấp cho bạn quyền truy cập vào lựa chọn văn bản.

Trải nghiệm của tôi là làm việc với các API khác nhau này trực tiếp là khá vụng về vì vậy nếu wrapSelection hoạt động cho bạn, tôi sẽ làm việc đó.

-3

Mã này hoạt động trong Safari, IE và Firefox - hy vọng đó là giúp đỡ một số

var str = (window.getSelection) ? window.getSelection() : document.selection.createRange(); 
str = str.text || str; 
str = str + ''; // the best way to make object a string... 
14

Đó jQuery plugin là mát mẻ nhưng nó hoàn thành một nhiệm vụ rất cụ thể: quấn văn bản bạn đánh dấu với một thẻ. Điều này có thể chỉ là những gì bạn muốn. Nhưng nếu bạn không muốn (hoặc đang ở trong một tình huống mà bạn không thể) thêm bất kỳ đánh dấu không liên quan đến trang của bạn, bạn có thể thử các giải pháp sau đây thay vì:

function getSelectedText() { 
    var txt = ''; 

    if (window.getSelection) { 
    txt = window.getSelection(); 
    } 
    else if (document.getSelection) { 
    txt = document.getSelection(); 
    } 
    else if (document.selection) { 
    txt = document.selection.createRange().text; 
    } 
    else return; 

    return txt; 
} 

Hàm này trả về một đối tượng đại diện cho lựa chọn văn bản. Nó hoạt động trên các trình duyệt (mặc dù tôi nghi ngờ các đối tượng nó trả về sẽ hơi khác nhau tùy thuộc vào trình duyệt và chỉ đáng tin cậy cho văn bản thực tế của kết quả chứ không phải bất kỳ thuộc tính bổ sung nào).

Lưu ý: Ban đầu tôi đã phát hiện ra đoạn mã đó tại đây: http://www.codetoad.com/javascript_get_selected_text.asp

+0

Bạn cần gọi hàm 'toString()'. 'getSelection' trả về đối tượng Selection. Đã thử nghiệm trong Chromium. – jcubic

+0

Điều này dường như không hoạt động trong các đầu vào trong Firefox, Edge 14 hoặc IE11. – Benno

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