使用jQuery选择器和setSelectionRange不是一个函数

我已经在下面组装了一个基本的jfiddle。 由于某种原因,我的选择器用于检索textarea框以设置值,但选择器不能使用setSelectionRange函数。 在控制台上,你会发现.setSelectionRange不是函数的错误。

http://jsfiddle.net/dMdHQ/6/

代码(请参考jfiddle): selector.setSelectionRange(carat,carat);

setSelectionRange(carat,carat)不是jquery对象上的方法。 您想在DOM元素上使用它。 所以尝试:

 selector[0].setSelectionRange(carat,carat); //use `[0]` or .get(0) on the jquery object 

见参考

小提琴

HTML:

  

JQUERY:

 jQuery.fn.putCursorAtEnd = function() { return this.each(function() { $(this).focus() // If this function exists... if (this.setSelectionRange) { // ... then use it (Doesn't work in IE) // Double the length because Opera is inconsistent about whether a carriage return is one character or two. Sigh. var len = $(this).val().length * 2; this.setSelectionRange(len, len); } else { // ... otherwise replace the contents with itself // (Doesn't work in Google Chrome) $(this).val($(this).val()); } // Scroll to the bottom, in case we're in a tall textarea // (Necessary for Firefox and Google Chrome) this.scrollTop = 999999; }); }; $("#search").putCursorAtEnd(); 

校验:

http://css-tricks.com/snippets/jquery/move-cursor-to-end-of-textarea-or-input/

你可以试试这对我有用。 我用它来从单独的地址字段构建一个地址,然后复制粘贴。

HTML

 ;  

jQuery

  $(document).ready(function() { $('#d_clip_button').click(function() { //get all the values of needed elements var fName = $("#firstName").val(); var lName = $("#lastName").val(); var address = $("#Address").val(); var city = $("#City").val(); var state = $("#State").val(); var zip = $("#Zip").val(); //concatenate and set "clip" field with needed content $('#clip').val(fName + " " + lName + "\n" + address + "\n" + city + ", " + state + " " + zip); //Do it if(copyToClipboard('#clip')) { alert('text copied'); } else { alert('copy failed'); } }); }); function copyToClipboard(elem) { // set focus to hidden element and select the content $(elem).focus(); // select all the text therein $(elem).select(); var succeed; try { succeed = document.execCommand("copy"); } catch(e) { succeed = false; } // clear temporary content $(target).val(''); return succeed; } 

对我来说这是一个很好的解决方案

 selector[0].setSelectionRange(start ,end); 

但我想补充一点。 我注意到setSelectionRange是元素获得焦点后异步可用的东西。

 var element = selector[0]; element.addEventListener('focus', function() { element.setSelectionRange(start, end); }); element.focus(); 

您也可以使用:

 element.selectionStart = start; element.selectionEnd = end;