js如何获取文本被选中段落的索引?

如何获取一段文本当中被鼠标选中的文字在当前文本中的起始索引和结束索引?

clipboard.png
现在能获取到文本,但是获取不到选中文本在当前段落中的索引,哪位大神知道请指教?

阅读 4.6k
2 个回答

使用getSelection可获取到选中文字的相关信息,包括起点和结束点。

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html;charset=UTF-8">
    <title>Document</title>
</head>
<script src="https://cdn.bootcss.com/jquery/3.3.1/jquery.min.js"></script>
<body>
<div id="example">
    <p>4月13日消息,据台湾媒体报道,32岁的孙燕姿(Sng Ee Tze)和后天将满34岁的荷兰籍印度尼西亚男友纳迪姆(Nadim Van Der Ros)交往5年,曾说过"有空就结婚"的她,果然趁着宣传期尾声,于3月31日在新加坡登记注册了!昨消息传开,她未否认,仅说会选择适当时间公布喜讯,所属"美妙音乐"则表示她个性低调,婚礼只会邀请双方亲友,也不会透露细节,但据新加坡可靠消息指出,婚宴订在5月初。</p>
<button id="button">选中一些文字,然后点击本按钮</button>
</div>
</body>
<script src="https://cdn.jsdelivr.net/npm/vue@2.5.16/dist/vue.js"></script>
<script>
    var oBtn = document.getElementById("button");
    oBtn.onclick = function() {
        var userSelection, text;
        if (window.getSelection) { 
            //现代浏览器
            userSelection = window.getSelection();
        } else if (document.selection) { 
            //IE浏览器 考虑到Opera,应该放在后面
            userSelection = document.selection.createRange();
        }
        console.log(userSelection);
        if (!(text = userSelection.text)) {
            text = userSelection;
        }
        alert(`你选择中的文本是:${text},在文本中的位置为${userSelection.anchorOffset}-${userSelection.focusOffset}`);
    };
</script>
</html>

参考:https://www.zhangxinxu.com/wo...

const allString = `dklasjdlkajslkdjalskjdlkasjdklasdhbasgduyquiw`;
const selectedString = `jdklas`;
const startIndex = allString.indexOf(selectedString);
const endStartIndex = startIndex >= 0 ? startIndex + selectedString.length : -1;

唯一的问题是如果选中的文字在全文里有重复的话就不行
比如全文为"我哈哈我哈哈我哈哈"
被选中的是"哈哈" 就不知道是哪一段了

撰写回答
你尚未登录,登录后可以
  • 和开发者交流问题的细节
  • 关注并接收问题和回答的更新提醒
  • 参与内容的编辑和改进,让解决方法与时俱进
推荐问题