Có chức năng nào để bỏ chọn tất cả văn bản bằng JavaScript không?


98

Có chức năng nào trong javascript để chỉ bỏ chọn tất cả văn bản đã chọn không? Tôi nghĩ nó phải là một chức năng toàn cục đơn giản như document.body.deselectAll();hoặc một cái gì đó.

Câu trả lời:


163

Thử cái này:

function clearSelection()
{
 if (window.getSelection) {window.getSelection().removeAllRanges();}
 else if (document.selection) {document.selection.empty();}
}

Thao tác này sẽ xóa một lựa chọn trong nội dung HTML thông thường trong bất kỳ trình duyệt chính nào. Nó sẽ không xóa lựa chọn trong đầu vào văn bản hoặc <textarea>trong Firefox.


25
Tôi có thể xác nhận rằng nó window.getSelection().removeAllRanges();hoạt động trên tất cả các trình duyệt hiện tại. Bản demo trực tiếp: jsfiddle.net/hWMJT/1
Šime Vidas

bạn phải nhấp vào một nút như <input id = 'but' type = 'button' value = 'click' / onclick = 'clearSelection ()'>
Ankur

1
@ Šime - không thực sự. Nó đang "hoạt động" vì vùng chọn bị mất khi nút lấy nét. Bằng chứng - mã được nhận xét, lựa chọn vẫn bị xóa.
Bóng Wizard là tai For You

@Shadow Dưới đây là bản demo thích hợp: jsfiddle.net/9spL8/3 Các removeAllRanges()phương pháp làm việc trong tất cả các trình duyệt hiện tại cho văn bản bên trong các đoạn văn hoặc các yếu tố phi-form-lĩnh vực tương tự. Đối với trường biểu mẫu (như textarea), phương pháp này không hoạt động trong IE9 và FF5.
Šime Vidas

1
Đã chỉnh sửa, hãy sử dụng window.getSelection().removeAllRanges(); trước vì nó tuân theo tiêu chuẩn, mã độc quyền nên luôn được thực thi sau cùng . Dù là năm 2004 hoặc mã tuân thủ tiêu chuẩn 4004 cuối cùng sẽ luôn là thứ chúng tôi sử dụng, vì vậy hãy phát hiện nó đầu tiên mà không có ngoại lệ!
John

27

Đây là một phiên bản sẽ xóa bất kỳ lựa chọn nào, bao gồm cả trong đầu vào văn bản và vùng văn bản:

Demo: http://jsfiddle.net/SLQpM/23/

function clearSelection() {
    var sel;
    if ( (sel = document.selection) && sel.empty ) {
        sel.empty();
    } else {
        if (window.getSelection) {
            window.getSelection().removeAllRanges();
        }
        var activeEl = document.activeElement;
        if (activeEl) {
            var tagName = activeEl.nodeName.toLowerCase();
            if ( tagName == "textarea" ||
                    (tagName == "input" && activeEl.type == "text") ) {
                // Collapse the selection to the end
                activeEl.selectionStart = activeEl.selectionEnd;
            }
        }
    }
}

không hoạt động nếu lựa chọn của bạn bắt đầu ở đâu đó từ dòng đầu tiên và bao gồm các lĩnh vực văn bản lớn hơn
Vyachaslav Gerchicov

1
@VyachaslavGerchicov: Đó có thể là vì đây là một ví dụ đơn giản được tạo nhanh chóng và nếu bạn kết thúc lựa chọn bên ngoài chính <div>thì mouseupsự kiện sẽ không kích hoạt. Thay vào đó, hãy đặt trình xử lý mouseup vào tài liệu và nó sẽ ổn thôi: jsfiddle.net/SLQpM/23
Tim Down

Đây là một giải pháp tuyệt vời trong các trình duyệt cũ hơn không hỗ trợ CSS do người dùng chọn khi kéo các phần tử xung quanh. Gọi clearSelection () trong lệnh gọi lại di chuyển chuột.
Geordie

6

Đối với Internet Explorer, bạn có thể sử dụng phương thức trống của đối tượng document.selection:

document.selection.empty ();

Đối với giải pháp trình duyệt chéo, hãy xem câu trả lời sau:

Xóa lựa chọn trong Firefox


Nếu trang web của bạn là công khai (không phải mạng nội bộ nơi bạn kiểm soát các trình duyệt) thì đó không phải là ý kiến ​​hay, đó không phải là trình duyệt chéo.
Bóng Wizard là tai For You

1
@Shadow Wizard - đúng, câu hỏi này có thể liên quan đến giải pháp trên nhiều trình duyệt: stackoverflow.com/questions/6186844/…
Luke Girvin

@Luke hay quá, thật tệ khi một trang web khác sẽ (có thể) không nhất quán giữa các trình duyệt khác nhau vì OP đã lấy những gì bạn đưa ra như hiện tại.
Bóng Wizard là tai For You

Theo ý kiến ​​của tôi, khả năng tương thích của trình duyệt là điều hiển nhiên cần được cung cấp bởi chúng tôi - nhiều nhà phát triển thậm chí không nhận thức được sự khác biệt như vậy tồn tại, vì vậy những người biết nên nói cho họ biết. Điều này sang một bên, tôi chưa bao giờ nói câu hỏi của bạn là sai , chỉ là thiếu sót .
Shadow Wizard là Ear For You,

@Luke chỉdocument.selection.clear() hoạt động trên IE. Xem tại đây: jsfiddle.net/9spL8/4 Ngoài ra, phương pháp này sẽ loại bỏ văn bản đã chọn chứ không chỉ bỏ chọn nó. Để chỉ bỏ chọn văn bản, hãy sử dụng document.selection.empty()thay thế.
Šime Vidas

0

Đối với textareaphần tử có ít nhất 10 ký tự, phần tử sau sẽ thực hiện một lựa chọn nhỏ và sau đó sau một giây rưỡi bỏ chọn nó:

var t = document.getElementById('textarea_element');
t.focus();
t.selectionStart = 4;
t.selectionEnd = 8;

setTimeout(function()
{
 t.selectionStart = 4;
 t.selectionEnd = 4;
},1500);

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.