【发布时间】:2018-12-05 23:46:14
【问题描述】:
我需要根据鼠标移动在输入字段中找到字符的位置。
例如:如果输入字段的值为“abcde”并且我正在移动我的 将鼠标放在字符“a”上,则位置将为 1,“b”将为其他字符提供 2,依此类推。
我确实找到了一些适用于 selectionStart 等的示例,但它们仅在插入符号放置在某个位置然后找到放置的位置时才有效。
我正在寻找的是 - 无论鼠标何时在字符上移动,在输入字段中可能/可能不会点击完成 - 我能够知道鼠标悬停的字符的位置。
我不知道如何将鼠标坐标分别转换为字符位置。有没有这样的javascript API?
非常感谢任何帮助/指针/想法。
更新
我的最终目标是在 contenteditable div 上发生拖动时自动移动插入符号。我找到了一个询问类似问题的以下链接 - 但到目前为止还没有建议的解决方案。
caret auto move - https://stackoverflow.com/questions/12397792/update-caret-position-of-input-and-insert-text-on-drop-event/53660415#53660415
我还添加了另一个示例来展示原生拖动与 jQuery 拖动的不同行为。我正在使用不支持插入符号自动拖动的 jQuery draggable。
【问题讨论】:
-
显然您可以通过在文本节点上注册也许处理程序来获取鼠标指针位置,但您可能无法获得单个字符的确切位置,因为并非所有字符的大小都相同。例如字符
l或i和w具有不同的宽度。 -
我认为没有什么可以直接满足您的需求,因为您将只使用一个文本节点。您可以将每个字符的文本分解为
span(或其他内联标记),并控制mouseenter和mouseleave,但这听起来过于复杂(而且可能太昂贵,特别是如果它是一个长文本)。也许如果您使用等宽字体,您可以通过获取容器内的鼠标坐标来计算位置。 -
请添加您到目前为止尝试过的内容
标签: javascript jquery html css