How can I programmatically select a specific range of text in an HTML input
field? (I don’t want to select the entire field, just a subset)
Also, how can I determine the currently selected range in a field?
Answers:
Thank you for visiting the Q&A section on Magenaut. Please note that all the answers may not help you solve the issue immediately. So please treat them as advisements. If you found the post helpful (or not), leave a comment & I’ll get back to you as soon as possible.
Method 1
Here’s how to select a portion of a text box (range select) and get the selected text:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd"> <html> <head> <title> Test </title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <script type="text/javascript"> window.onload = function() { var message = document.getElementById('message'); // Select a portion of text createSelection(message, 0, 5); // get the selected portion of text var selectedText = message.value.substring(message.selectionStart, message.selectionEnd); alert(selectedText); }; function createSelection(field, start, end) { if( field.createTextRange ) { var selRange = field.createTextRange(); selRange.collapse(true); selRange.moveStart('character', start); selRange.moveEnd('character', end); selRange.select(); field.focus(); } else if( field.setSelectionRange ) { field.focus(); field.setSelectionRange(start, end); } else if( typeof field.selectionStart != 'undefined' ) { field.selectionStart = start; field.selectionEnd = end; field.focus(); } } </script> </head> <body> <input type="text" name="message" id="message" value="Hello World" /> </body> </html>
Method 2
Small correction. It seems that IE moveEnd() method moves incrementally so selRange.moveEnd('character', end)
should be replaced with selRange.moveEnd('character', end-start)
:
function createSelection(field, start, end) { if( field.createTextRange ) { var selRange = field.createTextRange(); selRange.collapse(true); selRange.moveStart('character', start); selRange.moveEnd('character', end-start); selRange.select(); } else if( field.setSelectionRange ) { field.setSelectionRange(start, end); } else if( field.selectionStart ) { field.selectionStart = start; field.selectionEnd = end; } field.focus(); }
Method 3
Thank you! I wanna share my function now, it’s used in Ajaxel CMS along with Instant messenger
,wrapText:function(o, ot, ct) { var s = o[0].selectionStart; var e = o[0].selectionEnd; o.val(o.val().substring(0, s)+ot+o.val().substring(s,e)+ct+o.val().substring(e, o.val().length)); if (o[0].createTextRange){ var sr = o[0].createTextRange(); sr.collapse(true); sr.moveStart('character', s); sr.moveEnd('character',e-s+ot.length+ct.length); sr.select(); } else if(o[0].setSelectionRange){ o[0].setSelectionRange(s,e+ot.length+ct.length); } else if(o[0].selectionStart){ o[0].selectionStart=s; o[0].selectionEnd=e+ot.length+ct.length; } }
All methods was sourced from stackoverflow.com or stackexchange.com, is licensed under cc by-sa 2.5, cc by-sa 3.0 and cc by-sa 4.0