Is there a function in javascript to just deselect all selected text? I figure it's got to be a simple global function like document.body.deselectAll();
or something.
Asked
Active
Viewed 9.2k times
131

rolling_codes
- 15,174
- 22
- 76
- 112
5 Answers
227
Try this:
function clearSelection()
{
if (window.getSelection) {window.getSelection().removeAllRanges();}
else if (document.selection) {document.selection.empty();}
}
This will clear a selection in regular HTML content in any major browser. It won't clear a selection in a text input or <textarea>
in Firefox.
-
34I can confirm that `window.getSelection().removeAllRanges();` works in all current browsers. **Live demo:** http://jsfiddle.net/hWMJT/1/ – Šime Vidas Jul 03 '11 at 12:18
-
you have to click a button like – Ankur Jul 03 '11 at 12:23
-
1@Šime - not really. It's "working" because the selection is lost when the button get focus. [Proof](http://jsfiddle.net/hWMJT/2/) - code is commented, selection is still cleared. – Shadow The GPT Wizard Jul 03 '11 at 12:39
-
@Shadow Here is the proper demo: http://jsfiddle.net/9spL8/3/ The `removeAllRanges()` method works in all current browsers for text inside paragraphs or similar non-form-field elements. For form-fields (like textarea), this method doesn't work in IE9 and FF5. – Šime Vidas Jul 03 '11 at 13:37
-
@Shadow The second method - `document.selection.empty()` - works in IE9 for all types of selections (even form-fields). Therefore, the above code works in all current browsers except for the Firefox/form-field combination (for which there should exist a hack). – Šime Vidas Jul 03 '11 at 13:42
-
1Edited, use `window.getSelection().removeAllRanges();` *first* because it's standards-compliant, proprietary code should always be executed *last*. Be it the year 2004 or 4004 standards compliant code will always ultimately be what we use so detect it first without exception! – John Feb 23 '18 at 00:26
-
This causes the caret in a contenteditable div to disappear. – Johann Aug 20 '18 at 13:54
29
Here's a version that will clear any selection, including within text inputs and textareas:
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;
}
}
}
}

Tim Down
- 318,141
- 75
- 454
- 536
-
doesn't work if your selection starts somewhere from the first line and includes the larger text field – Vyachaslav Gerchicov Apr 26 '16 at 08:21
-
1@VyachaslavGerchicov: That's probably because it's a quickly-made simple example and if you end the selection outside the main `` then the `mouseup` event doesn't fire. Put the mouseup handler on the document instead and it would be fine: http://jsfiddle.net/SLQpM/23/– Tim Down Apr 26 '16 at 13:29
-
This is a great work-around in older browsers that don't support user-select CSS when dragging elements around. Call clearSelection() in the mouse move callback. – Geordie Mar 10 '17 at 00:32
7
This worked incredibly easier for me ...
document.getSelection().collapseToEnd()
or
document.getSelection().removeAllRanges()
Credits: https://riptutorial.com/javascript/example/9410/deselect-everything-that-is-selected

Dan Ortega
- 1,679
- 17
- 13
-
When using collapseToEnd (), an error appears in the console - Uncaught DOMException: Failed to execute 'collapseToEnd' on 'Selection': there is no selection. – Alexander V. Ulyanov May 05 '21 at 14:58
7
For Internet Explorer, you can use the empty method of the document.selection object:
document.selection.empty();
For a cross-browser solution, see this answer:

Community
- 1
- 1

Luke Girvin
- 13,221
- 9
- 64
- 84
-
1If your website is public (not intranet where you control the browsers) it's not good idea, it's not cross browser. – Shadow The GPT Wizard Jul 03 '11 at 12:17
-
2@Shadow Wizard - true, this question may be relevant for a cross-browser solution: http://stackoverflow.com/questions/6186844/clear-a-selection-in-firefox – Luke Girvin Jul 03 '11 at 12:17
-
1@Luke nice, too bad that another website is going to be (probably) not consistent among different browsers as the OP took what you gave as-is. – Shadow The GPT Wizard Jul 03 '11 at 12:42
-
1In my opinion browser compatibility is something obvious that should be offered by us - many developers aren't even aware such differences exist, so those who know should tell them. This aside, I never said your question is *wrong*, just *missing*. – Shadow The GPT Wizard Jul 03 '11 at 12:56
-
1@Luke `document.selection.clear()` works **only** in IE. See here: http://jsfiddle.net/9spL8/4/ Also, this method will *remove* the selected text, not just deselect it. To just deselect the text, use `document.selection.empty()` instead. – Šime Vidas Jul 03 '11 at 13:47
-
My mistake, it is Internet Explorer only, and the method should be empty not clear - I've edited my answer to reflect this. – Luke Girvin Jul 03 '11 at 14:03
0
For a textarea
element with at least 10 characters the following will make a small selection and then after a second and a half deselect it:
var t = document.getElementById('textarea_element');
t.focus();
t.selectionStart = 4;
t.selectionEnd = 8;
setTimeout(function()
{
t.selectionStart = 4;
t.selectionEnd = 4;
},1500);

John
- 1
- 13
- 98
- 177