使用 Javascript/JQuery 为移动网络(Android、iOS、Windows Phone)突出显示/选择元素上的文本

Posted

技术标签:

【中文标题】使用 Javascript/JQuery 为移动网络(Android、iOS、Windows Phone)突出显示/选择元素上的文本【英文标题】:Highlighting/ Selecting text on element with Javascript/JQuery for mobile web (android, iOS, Windows Phone) 【发布时间】:2013-02-05 03:53:13 【问题描述】:

我正在尝试通过允许用户单击/触摸某个元素并自动“选择/突出显示该元素内的文本。

✔ 我想要发生的事情:

    点击输入元素和“全选”文本。 按住突出显示的文本允许“复制或剪切”原生选项出现。

尝试 1: http://jsfiddle.net/w3R6u/2/

html
<input type="text" value="This text will be selected when you click in this input" />

JQUERY
$("input").click(function () 
  window.document.execCommand('SelectAll', true);
);

..

尝试 2: http://jsfiddle.net/w3R6u/4/

HTML
<input type="text" value="This text will be selected when you click in this input" />

JQUERY
$("input").click(function () 
   this.selectionStart=0; 
   this.selectionEnd=this.value.length;
   return false;
 );

✖实际发生了什么:

    单击输入元素和“全选”文本。 (正确) 按住突出显示的文本并出现“选择单词”和“全选”原生选项。 (不正确)

上面的 2 次尝试会做到(第 1 步),就像上帝自然希望他们做的那样,是的......但是通过我在 android 设备上的测试,我发现当“按住”时在元素(第 2 步) 上,它会提示用户“选择单词”或“全选”。完全忽略文本已被选择的事实!!正确的做法是显示用户的本机“复制”或“剪切”选项,因为文本已被选中。

有谁知道为什么会出现这个问题以及如何解决它?

。 .

▼ 尝试失败

    我的第一次尝试当然是找到“复制和粘贴”javascript 解决方案。尽管 W3.org 正在开发 Clipboard API and Events(2013 年 2 月),但它只是一项正在进行的工作。您可以使用 getData 和 setData 方法以及 will work in IE,但这对我没有帮助。

    它们是诸如“ZeroClipBoard”和“zClip”之类的闪存解决方法,但它们也不起作用,因为手机上没有安装闪存。

    遵循 *** 问题中的指南:Selecting text in mobile Safari on iPhone

【问题讨论】:

你试过调用输入的select()方法吗? var input = $("input")[0]; input.focus(); input.select(); 感谢您的回复蒂姆,我最终尝试了这个:$("input").click(function() $(this).focus(); $(this).select (););似乎和其他人做同样的事情......它会选择所有文本(就像它应该做的那样),当我按住它时,它会提示我是否要“选择单词”或“选择全部”。 嗯嗯。我对此并不抱太大希望。顺便说一句,如果用户手动选择输入文本,你会得到你想要的行为吗? 是的,在手机上选择很标准:按住word,然后选择“Select Word”或“Select All”选项,然后再次按住word,选择“剪切,复制,或粘贴”。这样就可以了。 document.execCommand 的第二个参数决定是否显示默认用户界面。 developer.mozilla.org/es/docs/Web/API/Document.execCommand 【参考方案1】:

我相信您必须使用范围来进行选择。以下是原版 javascript,可与 jquery 一起使用,但可能需要一些 jquery 按摩。

	function selectAll(e) 
	  var elem = e.target;

	  var start = 0;
	  var end = elem.value.length;

	  if (elem.createTextRange) 
	    var selRange = elem.createTextRange();
	    selRange.collapse(true);
	    selRange.moveStart('character', start);
	    selRange.moveEnd('character', end);
	    selRange.select();
	    elem.focus();
	   else if (elem.setSelectionRange) 
	    elem.focus();
	    elem.setSelectionRange(start, end);
	   else if (typeof elem.selectionStart != 'undefined') 
	    elem.selectionStart = start;
	    elem.selectionEnd = end;
	    elem.focus();
	  
	


	var elem = document.getElementById("myField");
	elem.onclick = selectAll;
&lt;input id="myField" value="this is the text in there" /&gt;

【讨论】:

以上是关于使用 Javascript/JQuery 为移动网络(Android、iOS、Windows Phone)突出显示/选择元素上的文本的主要内容,如果未能解决你的问题,请参考以下文章

使用 javascript/jQuery 将桌面的 href url 切换到移动设备

是否可以在 AngularJS、JavaScript 和 JQuery 中跟踪移动/桌面模型?

在 HTML5 画布上工作时出现 JavaScript (JQuery) 问题

javascript jquery移动代码,用于检查单选按钮结果,多项选择

如何在聊天中回复特定消息,就像使用 html css javascript/jquery 的 skype/whatsapp

我无法在 iOs 上使用任何 javascript (jQuery)