javascript – 如何在文本选择扩展后捕获iOS中的所选文本范围

我正在使用一个网络应用程序,允许用户选择一些文本,单击一个按钮,并保存突出显示的文本.这在桌面浏览器中非常出色(在本例中为chrome),但是在iOS中我遇到了本机文本选择问题,用户可以在其中更改所选文本.

这是Jsfiddle显示的问题(问题只存在于iOS):http://jsfiddle.net/JasonMore/gWZfb/

>用户开始文本选择
>用户扩展他们的文本选择,并点击“显示上面选中的文本”
>只有第一个选择的单词“The”出现,即使我想要“正义之路”

1开始

2选择文本并点击按钮

3只有“The”

这是我正在使用的JS:

$(function() {
    $('#actionButton').click(function() {
        $('#result').text(selectedRange.toString());
    });

    $('#slipsum').on('mouseup touchend','p',function() { 
        getSelectedRange();
    });
});

var selectedRange = null;

var getSelectedRange = function() {
    if (window.getSelection) {
        selectedRange = window.getSelection().getRangeAt(0);
    } else {
        selectedRange = document.getSelection().getRangeAt(0);
    }
};​

HTML:

<h3>Selected Text:</h3>
<p id="result">
</p>
<br/>
<p>
    <input type="button" id="actionButton" value="Show the selected text above" />
</p>
<!-- start slipsum code -->
<div id="slipsum">
<h1>Is she dead,yes or no?</h1>
<p>Do you see any Teletubbies in here? Do you see a slender plastic tag clipped to my shirt with my name printed on it? Do you see a little Asian child with a blank expression on his face sitting outside on a mechanical helicopter that shakes when you put quarters in it? No? Well,that's what you see at a toy store. And you must think you're in a toy store,because you're here shopping for an infant named Jeb. </p>

<h1>So,you cold?</h1>
<p>The path of the righteous man is beset on all sides by the iniquities of the selfish and the tyranny of evil men. Blessed is he who,in the name of charity and good will,shepherds the weak through the valley of darkness,for he is truly his brother's keeper and the finder of lost children. And I will strike down upon thee with great vengeance and furIoUs anger those who would attempt to poison and destroy My brothers. And you will kNow My name is the Lord when I lay My vengeance upon thee. </p>

<h1>I'm serIoUs as a heart attack</h1>
<p>Do you see any Teletubbies in here? Do you see a slender plastic tag clipped to my shirt with my name printed on it? Do you see a little Asian child with a blank expression on his face sitting outside on a mechanical helicopter that shakes when you put quarters in it? No? Well,because you're here shopping for an infant named Jeb. </p>

<h1>Is she dead,yes or no?</h1>
<p>Like you,I used to think the world was this great place where everybody lived by the same standards I did,then some kid with a nail showed me I was living in his world,a world where chaos rules not order,a world where righteousness is not rewarded. That's Cesar's world,and if you're not willing to play by his rules,then you're gonna have to pay the price. </p>

<h1>Is she dead,yes or no?</h1>
<p>Your bones don't break,mine do. That's clear. Your cells react to bacteria and viruses differently than mine. You don't get sick,I do. That's also clear. But for some reason,you and I react the exact same way to water. We swallow it too fast,we choke. We get some in our lungs,we drown. However unreal it may seem,we are connected,you and I. We're on the same curve,just on opposite ends. </p>
</div>
<!-- please do not remove this line -->

<div style="display:none;">
<a href="http://slipsum.com">lorem ipsum</a></div>

<!-- end slipsum code -->
​

解决方法

对于今后绊倒这个问题的人来说,这是决议:

http://jsfiddle.net/JasonMore/gWZfb/

$(function() {
    $('#actionButton').click(function() {
        if (selectedRange) {
            $('#result').text(selectedRange.toString());
            clearInterval(timer);
        }
    });

    timer = setInterval(getSelectedRange,150);
});

var timer = null;

var selectedRange = null;

var getSelectedRange = function() {
    try {
        if (window.getSelection) {
            selectedRange = window.getSelection().getRangeAt(0);
        } else {
            selectedRange = document.getSelection().getRangeAt(0);
        }
    } catch (err) {

    }

};​

相关文章

前言 做过web项目开发的人对layer弹层组件肯定不陌生,作为l...
前言 前端表单校验是过滤无效数据、假数据、有毒数据的第一步...
前言 图片上传是web项目常见的需求,我基于之前的博客的代码...
前言 导出Excel文件这个功能,通常都是在后端实现返回前端一...
前言 众所周知,js是单线程的,从上往下,从左往右依次执行,...
前言 项目开发中,我们可能会碰到这样的需求:select标签,禁...