是否可以以编程方式检测 元素中的插入符位置?

2023-12-11

假设有一个常规的<input type=text>其中包含数据的文本框。

是否可以(通过 JavaScript)检测文本框中文本光标的位置?

我能够检测向左箭头或向右箭头按键事件 - 但如何检测光标位置?

为什么我需要这个:


我在这方面做了很多工作。以下内容适用于所有主要浏览器(包括 IE 6)的文本<input>s and <textarea>s 并且适用于所有情况,包括当存在前导空格和尾随空格时(这是许多解决方案,包括 a-tool 失败的地方)。这个问题中的这段代码有一些背景:IE 的 document.selection.createRange 不包含前导或尾随空白行

您还可以获取以下内容作为我编写的尚未记录的 jQuery 输入/文本区域选择插件的一部分:http://code.google.com/p/rangyinputs/

function getInputSelection(el) {
    var start = 0, end = 0, normalizedValue, range,
        textInputRange, len, endRange;

    if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
        start = el.selectionStart;
        end = el.selectionEnd;
    } else {
        range = document.selection.createRange();

        if (range && range.parentElement() == el) {
            len = el.value.length;
            normalizedValue = el.value.replace(/\r\n/g, "\n");

            // Create a working TextRange that lives only in the input
            textInputRange = el.createTextRange();
            textInputRange.moveToBookmark(range.getBookmark());

            // Check if the start and end of the selection are at the very end
            // of the input, since moveStart/moveEnd doesn't return what we want
            // in those cases
            endRange = el.createTextRange();
            endRange.collapse(false);

            if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
                start = end = len;
            } else {
                start = -textInputRange.moveStart("character", -len);
                start += normalizedValue.slice(0, start).split("\n").length - 1;

                if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
                    end = len;
                } else {
                    end = -textInputRange.moveEnd("character", -len);
                    end += normalizedValue.slice(0, end).split("\n").length - 1;
                }
            }
        }
    }

    return {
        start: start,
        end: end
    };
}

var el = document.getElementById("your_input");
var sel = getInputSelection(el);
alert(sel.start + ", " + sel.end);
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

是否可以以编程方式检测 元素中的插入符位置? 的相关文章

随机推荐

  • javascript youtube 像滑块控件

    我有一个关于在浏览器中实现滑块控件的问题 我需要在浏览器中随时间播放数据 我将让一个 Worker 通过调用 REST api 来填充播放缓冲区 然后 UI 线程将消耗缓冲区并向用户回放数据 我想模拟 YouTube 进度 UI 控件 它在
  • 当应用凭据存储在 APK 中时,Firebase 如何防止攻击者访问 Firebase 数据库?

    因为根据多个消息来源 如何避免 APK 文件的逆向工程 不可能阻止应用程序被逆向工程 并且 Firebase 应用程序令牌存储在 APK 源中 攻击者如何不会获取这些凭据并破坏 Firebase 数据库 我担心的是 开发人员在本机应用程序和
  • 使用 dplyr 获得更好的输出——破坏函数和结果

    这是一个长久以来的疑问 但现在我真的要解决这个难题了 我一直在使用 dplyr 我认为它很棒总结变量 但是 我尝试显示数据透视表 但仅取得部分成功 Dplyr 始终报告包含所有结果的单行 有什么烦人的 我必须复制粘贴结果才能出色地组织所有内
  • GNU GAS:标签没有相对引用

    我正在写一个小引导扇区用于学习目的 这是boot S code16 text movw 0xB800 ax 0xB000 is the text screen video memory movw ax es set it as the es
  • 静态变量会阻碍数据缓存吗?

    From 用 C 优化软件 第 7 1 节 静态数据的优点是可以根据需要进行初始化 程序启动前的值 缺点是内存 整个程序执行过程中都会占用空间 即使 变量仅在程序的一小部分中使用 这使得数据 缓存效率较低 的用法static在此例外的是 它
  • 在 CUDA 统一内存多 GPU 或多处理器中使用原子算术运算

    我正在尝试实现一个使用统一内存的 CUDA 程序 我有两个统一的数组 有时它们需要原子更新 下面的问题有针对单 GPU 环境的答案 但我不确定如何扩展问题中给出的答案以适应多 GPU 平台 问题 cudaatomicAdd 示例无法产生正确
  • 爪哇芬威克树

    我尝试用 Java 实现 Fenwick 树 但没有得到预期的结果 这是我的代码 import java io import java util import java math class fenwick1 public static i
  • 需要为python打包jinja2模板

    更新 我提出了一个更好的问题和更好的答案here 我本来打算删除这个问题 但有些答案可能对未来的搜索者有用 我的问题与this 但这个答案很丑陋 需要一个目录结构 包括sharedtemplates templates templates
  • 在触发器中使用插入和删除的表

    我想编写触发器来处理插入和删除的表 我已经编写了插入触发器 CREATE TRIGGER FILL TABLE ON Person FOR INSERT AS DECLARE ID int SELECT ID p ID FROM Perso
  • 如何计算文档中的行数? [关闭]

    Closed 这个问题不符合堆栈溢出指南 目前不接受答案 我有这样的台词 我想知道我实际上有多少台词 09 16 39 AM all 2 00 0 00 4 00 0 00 0 00 0 00 0 00 0 00 94 00 09 16 4
  • C 中的逻辑运算不符合预期

    有人可以解释一下以下代码的功能吗 include
  • 如何在CSS中绘制循环箭头?

    如何使用 CSS 在中心绘制循环箭头和文本 如下图所示 我尝试过创建曲线箭头 但我不知道如何使其看起来像我想要的那样 arrow width 200px height 200px border 6px solid border radius
  • 通过 setup.exe 创建日志的 msiexec 参数不起作用

    我正在尝试从我的安装中获取使用以下命令的日志setup exe 我可以得到一个日志setup exe V l v c temp installlog txt 但我想通过x参数以及获取 额外的调试信息 当我尝试时setup exe V l v
  • 如何根据 swift 3 中的数组选择复选标记?

    我有一个数组 其中选定的名称将被存储并传递到视图控制器之前 当我需要转到上一个视图控制器时 则需要选择先前选择的复选标记 但在这里它启用了最后一个选定的元素 唯一的问题是如果我选择三个 那么它不是选择三个 它只是检查标记最后一个元素 但我需
  • C# 不通过返回类型推断重载方法

    我正在编写一个 C 程序来抓取目录并提供最后 CSV 行中的日期小于当前日期的文件列表 由于这是一个程序 因此我并没有真正花费太多时间使代码变得非常干净或任何东西 但这只是一个意见问题 我想 奇怪的是下面的一组代码片段 三个静态方法都在同一
  • AngularUI - 兼容的浏览器

    我尝试打开 AngularUI 网站 http angular ui github io 在 IE8 中 UI 在 IE8 中无法正确呈现 在最新版本的 chrome firefox 中工作正常 这促使我搜索 AngularUI 模块的浏览
  • IndexError:列表赋值索引超出范围 - 使用数组的 Python

    我最近开始使用 python 但对于该语言的很多东西我仍然是新手 这段代码应该打印一系列行 例如 47 815 47 54 48 065 57 45 我从几个文本文件 称为 2t1 2t19 3t1 3t19 作为输入以及结束后的文件名 每
  • Cheerio 不会等待正文加载

    我制作了一个非常简单的脚本 它抓取了一个食谱网站以获取标题 准备时间和成分 除了脚本无法抓取数组的每一页之外 一切工作正常 有时我得到 4 个 有时 2 个 有时甚至 0 个 看来脚本不会等待主体完全加载 我完全知道 Cheerio 不理解
  • 带有被安全/ASR 规则阻止的宏的工具 - 如何修复?

    我有一个 Excel 工具 xlsm 文件 我正在向用户传播 他们从我们的网站下载该文件 然后就可以使用它 简而言之 该工具有自己的菜单栏和一堆宏 例如进行计算 从 API 提取数据等 我使用 Unviewable 对用户隐藏代码 我用证书
  • 是否可以以编程方式检测 元素中的插入符位置?

    假设有一个常规的