使文本“更多”可选择

2023-12-30

我有文字在<p> tag:

<p>Hello world... and goodbye mind A B!</p>

如何增加文本可选择的区域?我知道我可以增加font-size这会增加可选择的区域,但是有更好的方法吗?

为了澄清这个问题。例如,在移动屏幕上,我发现很难突出显示只有一个字母的单词,例如i,但是如果命中检测的区域范围更广,那么选择它就会容易得多。

怎么做?一个令人费解的谜题。

赏金信息

寻找可行的跨浏览器解决方案。请仔细阅读问题和评论在发布答案之前以避免混淆。用户 @mmm 发布了一个非常接近的问题,但在他的方法中,而<p>标签具有更广泛的点击检测(完美!),它会在点击时自动选择。我需要用户与<p>标签就像我们基于普通文本所做的那样<p>标签...但是具有更大的命中检测器。

EDIT

进一步澄清。举个例子,这个问题的评论选择区域是如此之大:

您可以在下面找到此评论。将光标悬停在其上,直到光标变为cursor:text。这是默认选择区域。

但我的目标是将其扩展到更大的区域, 像这样:


根据我的测试,它可以在 iphone、ff 和 chrome 上运行 - 如果有人可以在 Android 上进行测试,我将不胜感激!

边框显然可以删除。

此代码使用此答案中的代码(SelectText() 函数的一部分):选择元素中的文本(类似于用鼠标突出显示) https://stackoverflow.com/a/987376/3993662

Fiddle https://jsfiddle.net/jknnou4r/5/

Code:

function extendSelection() {
    var extendBy = arguments.length <= 0 || arguments[0] === undefined ? 15 : arguments[0];

    var extended = document.getElementsByClassName('extendedSelection');
    [].slice.call(extended).forEach(function (v) {
        var bounds = v.getBoundingClientRect();
        var x = bounds.left;
        var r = textWidth(v.innerHTML, ''+ css(v, 'font-weight') +' ' + css(v, 'font-size') + ' ' + css(v, 'font-family') );
        var y = bounds.top;
        var w = bounds.width;
        var h = bounds.height;
        var element = document.createElement('div');
        element.style.position = 'absolute';
        element.style.height = h + extendBy + 'px';
        element.style.width = r + extendBy + 'px';
        element.style.left = x - extendBy / 2 + 'px';
        element.style.top = y - extendBy / 2 + 'px';
        element.style.border = '1px dotted black';
        document.body.appendChild(element);
        element.addEventListener('click', function (e) {
            SelectText(v);
        });
        element.addEventListener('touchend', function (e) {
            SelectText(v);
        });
    });
}

function css(element, property) {
    return window.getComputedStyle(element, null).getPropertyValue(property);
}

function textWidth(text, font) {
    var el = textWidth.canvas || (textWidth.canvas = document.createElement("canvas"));
    var draw = el.getContext("2d");
    draw.font = font;
    var m = draw.measureText(text);
    return m.width;
};

function SelectText(element) {
    var doc = document,
        text = element,
        range,
        selection;
    if (doc.body.createTextRange) {
        range = document.body.createTextRange();
        range.moveToElementText(text);
        range.select();
    } else if (window.getSelection) {
        selection = window.getSelection();
        range = document.createRange();
        range.selectNodeContents(text);
        selection.removeAllRanges();
        selection.addRange(range);
        selection.setSelectionRange(0, element.value.length)
    }
}

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

使文本“更多”可选择 的相关文章

  • JavaScript 中的 Promise 有什么意义?

    一个承诺是一个 可能现在可用 或将来可用 或永远不可用的值 来源 MDN 假设我有一个想要处理图片的应用程序 图片已加载 例如在算法在后台使用它之后 或某种其他类型的延迟 现在我想检查一下图片是否可以在future 通过使用承诺 而不是回调
  • onclick 事件中未调用函数

    我想在每个 YouTube 链接的末尾添加一些 HTML 以在 litebox 中打开播放器 到目前为止 这是我的代码 document ready function var valid url new RegExp youtube com
  • 将 Firebase 云消息传递与 Windows 应用程序结合使用

    我在 Android 和 iOS 应用程序中使用 Firebase Cloud Messaging 但是我还有此应用程序的 Windows Mac OS 版本 我想保留相同的逻辑 我知道 Firebase Cloud Messaging 可
  • JavaScript RegEx:不同的结果:使用字符串和使用正则表达式“文字”构建模式?

    使用 RegExp 文字与字符串之间有什么区别吗 http jsfiddle net yMMrk http jsfiddle net yMMrk String prototype lastIndexOf function pattern p
  • 如何在另一个自定义 Hook 中使用返回值的自定义 Hook?

    我正在使用 React native 其中有一个名为的自定义 HookuseUser使用以下方法从 AWS Amplify 获取用户信息Auth getUserInfro方法 然后获取返回对象的一部分并用它设置一个状态变量 我还有另一个名为
  • CSS 到底如何计算相对尺寸

    我想更好地理解某些 CSS 行为 这与具体问题无关 我只是在调试网站时遇到的 让我们在固定位置的 div 中放置一个全宽图像 div img style width 100 src https via placeholder com 150
  • mongodb 聚合 - 累积字段的不同组值

    如果我有Player表格文件 name String score Int 我有Group文档 其中组代表玩家列表 groupName String players ObjectID 玩家可以属于多个组 我想做一个聚合Player文档 按以下
  • 如何在模态打开时防止主体滚动

    我在用着W3schools 模态脚本 https www w3schools com howto tryit asp filename tryhow css modal我想添加一个功能 防止模型打开时整个主体滚动 我根据我的需要对原始脚本做
  • 使用 JavaScript 移动页面上的按钮

    我的按钮可以移动 但奇怪的是 我无法弄清楚偏移是否有问题 我希望我的按钮随着鼠标光标移动 但现在它的移动方式不是我想要的 有时它会消失 另外 创建的新按钮是重叠的 我不知道如何解决这个问题并拥有更好的外观 var coorA var coo
  • 如何停止TinyMCE删除span标签?

    在我的工作中 前一位程序员决定使用公司网站上精彩的TinyMCE 我遇到的数千个问题之一是 如果原文有的话span标签 当我按下退格键删除一行 p仅标签 全部span标签已从文本中删除 这个错误比另一个错误更具体 我可以删除anything
  • 如何计算特定字符在字符串中出现的次数

    我正在尝试创建一个函数来查看数组中的任何字符是否在字符串中 如果是 有多少个 我尝试计算每一种模式 但是太多了 我尝试使用 Python 中的 in 运算符的替代方案 但效果不佳 function calc fit element var
  • JavaScript eval("{}") 返回行为?

    根据ECMA 262 规范 http www ecma international org publications files ECMA ST Ecma 262 pdf 以下语句返回1 eval 1 eval 1 eval 1 var a
  • 使用 CSS 的响应式图像

    我发现调整图像大小以使其具有响应能力很棘手 我正在开发一个 php 应用程序来自动将网站转换为响应式版本 我有点被图像困住了 我已经成功地为网站上的每个图像添加了一个包装类 并且可以很好地调整图像的大小 我的问题在于自然小于窗口的图像 例如
  • 覆盖 jQuery 验证 MVC4 中的默认设置

    要覆盖查询验证插件 请在文件 http docs jquery com Plugins Validation validate toptions 推荐的方式是 selector validate invalidHandler functio
  • 从 PHP 数组生成 HTML 表

    我不明白这一点 我需要解决看似简单的问题 但这超出了我的逻辑 我需要编写一个函数 table columns input cols 它将输出一个表 示例 input array apple orange monkey potato chee
  • Webpack 4:如何使用 LESS 获取 CSS 源映射?

    多年来我一直在尝试让 CSS 源映射在 webpack 中工作 但没有成功 我不确定链条中哪里出了问题 我希望有人能指出我正确的方向 这是发生的事情 行号是错误的 实际上文件名也是错误的 main less只是包含一堆 import也就是说
  • react-native - 图像需要来自 JSON 的本地路径

    你好社区 我正在react native中开发一个测试应用程序 并尝试从本地存储位置获取图像 我实际在做什么 我将图像直接链接源提供给 var 并在渲染函数中调用此方法 react 0 14 8 react native 0 23 1 np
  • 如何通过索引访问 JSON 对象中的字段

    我知道这不是最好的方法 但我别无选择 我必须通过索引访问 JSONObject 中的项目 访问对象的标准方法是只写this objectName or this objectName 我还找到了一种获取 json 对象内所有字段的方法 fo
  • 没有输入的 jQuery 日期选择器

    我有一个相当复杂的网络应用程序 我想向其中添加一些日期选择 UI 我遇到的问题是我无法从文档中弄清楚如何真正控制日期选择器的出现方式和时间 不涉及任何表单元素 不 我不会添加秘密表单字段 因此简单的开箱即用方法根本行不通 我希望有人可以提供
  • 使用velocity.js制作可拖动元素的动画

    我正在使用velocity js 为用户拖动的可拖动 SVG 元素设置动画 然而 velocity js 将先前的 mousemove 坐标排队并通过所有后续的 mousemove 坐标进行动画处理 我想要的是velocity js 不要对

随机推荐

  • 设置 pandas 图的图例位置

    我知道如何设置 matplotlib 图的图例位置plt legend loc lower left 但是 我正在用 pandas 方法进行绘图df plot 并需要将图例位置设置为 左下 有谁知道该怎么做 编辑 我实际上正在寻找一种通过
  • 我们如何在 Ionic App 中实现 SignalR?

    我制作了一个应用程序 可以向已注册该应用程序 Ionic Angular 的用户发送消息 它从数据库 SQL Server C API 获取所有消息并在消息框中打印出来 这很好 但是当我们向正在交谈的人发送消息时 该人在不刷新页面的情况下不
  • 在 Rails 中,如何在 i18n 语言环境文件中指定默认 flash 消息

    我知道 i18n 语言环境文件中有一些预设结构 以便 Rails 自动提取值 例如 如果您想为新记录设置默认提交按钮文本 config locales en yml en helpers submit create Create model
  • MySQL表可以存储的最大记录数是多少?

    MySQL MyISAM 表可以存储多少条记录 InnoDB可以有多少个 您无法按记录数进行计数 因为您的表可能包含只有几个 int 字段的非常短的记录 或者您的记录可能非常长且包含数百个字段 因此必须以表的文件大小来衡量 对于 MYSQL
  • 由不同操作成功触发的 Github Action

    我试图在成功运行不同的操作后触发 Github 操作来运行 这两个工作流程是 单元测试操作 首先运行 并且应该触发下面的 后续测试 操作 name unit tests on push branches jobs build runs on
  • 我正在用 microsoft Visual Studio 做我的 C++ 作业,我注意到一些不寻常的事情 [重复]

    这个问题在这里已经有答案了 当我尝试获取动态数组中插槽的数据时 出现异常 但是如果我使用不同的编译器 例如在线编译器 运行相同的代码 https www onlinegdb com online c compiler https www o
  • 如何绘制 z = f(x, y) 的平滑二维彩色图

    我正在尝试绘制二维现场数据使用 matplotlib 所以基本上我想要类似的东西 在我的实际情况中 我将数据存储在硬盘驱动器上的文件中 然而 为了简单起见 请考虑函数 z f x y 我想要一个平滑的二维图 其中 z 使用颜色可视化 我使用
  • 如何使用 JQuery 和跨站点脚本编写 ajax?

    我遇到一个问题 我必须从这里获取 json http templodasdeusas com br game srv game php srv home http templodasdeusas com br game srv game p
  • 使用属性 XmlSerialize 自定义集合

    我有一个简单的类 它继承自 Collection 并添加了几个属性 我需要将此类序列化为 XML 但 XMLSerializer 会忽略我的附加属性 我认为这是因为 XMLSerializer 对 ICollection 和 IEnumer
  • 在 C++ 中打印完整的回溯

    我想以与 gdb 中类似的格式从 Linux 中的 C 程序转储回溯 我尝试使用 backtrace 和 backtrace symbols 函数来实现此目的 这些返回的函数名称和偏移量 我可以使用 cxa demangle 函数来获取可读
  • 如何通过按按钮关闭 Tkinter 窗口?

    编写一个带有标签的 GUI 应用程序 Good bye 当 的时候Button单击后 窗口关闭 到目前为止 这是我的代码 但它不起作用 谁能帮我解决我的代码吗 from Tkinter import window Tk def close
  • 通用铸造

    我怀疑答案是否定的 但是是否可以在 C NET v2 0 中执行类似的操作 class Converter
  • 在参数中设置symfony缓存目录

    我正在为 Symfony 应用程序构建 docker 环境 我每个应用程序都有一个容器 其中附加了一个仅用于链接到应用程序服务器的 Web 根数据的容器 作为基础设施安全强化的一部分 这些数据容器被设置为只读 以防止任何远程代码攻击 每个应
  • 如何使用 Java Scanner 测试空行?

    我期待使用扫描仪进行输入 直到没有任何内容 即当用户输入空行时 我该如何实现这一目标 I tried while scanner hasNext process input 但这会让我陷入循环 这是一个方法 Scanner keyboard
  • 如何覆盖 Angular Material 2 日期选择器的模板

    我需要修改 Angular 2 材质日期选择器的模板 它的模板在 angular material esm5 datepicker es5 js 中定义的几个内部组件中声明 我可以直接在节点包中修改模板 但是更新时它会被覆盖 我可以看到这种
  • Heroku 进程以状态 0 退出,但其 dyno 仍然“崩溃”

    我有一个用 ruby 编写的报废脚本 在工作台内的 Heroku 上运行 即使脚本运行顺利并以状态 0 退出 heroku 仍然告诉我测功机崩溃了 2016 12 13T00 59 10 695566 00 00 heroku spider
  • Python 可以用于客户端 Web 开发吗? [关闭]

    就目前情况而言 这个问题不太适合我们的问答形式 我们希望答案得到事实 参考资料或专业知识的支持 但这个问题可能会引发辩论 争论 民意调查或扩展讨论 如果您觉得这个问题可以改进并可能重新开放 访问帮助中心 help reopen questi
  • ElapsedTicks、ElapsedMilliseconds、Elapsed.Milliseconds 和 Elapsed.TotalMilliseconds 之间的区别? (C#)

    我对这4个完全感到困惑 ElapsedMilliseconds long ElapsedTicks long Elapsed TotalMilliseconds double 和 Elapsed Milliseconds int 之间有什么
  • py2exe/py2app 和 docx 不能一起工作

    在 Windows 7 上安装 docx D Program Files x86 Python27 Lib site packages 如下所示 Installed docx on OS X at Library Frameworks Py
  • 使文本“更多”可选择

    我有文字在 p tag p p Hello world and goodbye mind A B p 如何增加文本可选择的区域 我知道我可以增加font size这会增加可选择的区域 但是有更好的方法吗 为了澄清这个问题 例如 在移动屏幕上