检测文本中哪个单词被点击

2024-04-26

我正在构建一个 JS 脚本,该脚本在某个时刻能够在给定页面上允许用户单击任何单词并将该单词存储在变量中。

我有一个非常丑陋的解决方案,并且涉及使用 jQuery 进行类解析: 我首先解析整个 html,将所有内容拆分到每个空间上" ",并重新附加包含在 a 中的所有内容<span class="word">word</span>,然后我使用 jQ 添加一个事件来检测对此类的点击,并使用 $(this).innerHTML 获取点击的单词。

这在很多方面都是缓慢且丑陋的,我希望有人知道另一种方法来实现这一目标。

PS:我可能会考虑将其作为浏览器扩展来运行,所以如果这听起来仅用 JS 是不可能的,并且如果您知道允许这样做的浏览器 API,请随时提及!

一种可能的解决方法是让用户突出显示该单词而不是单击它,但我真的很希望只需单击一下即可实现相同的操作!


这是一个无需在文档中添加大量跨度的解决方案(适用于 Webkit、Mozilla 和 IE9+):

https://jsfiddle.net/Vap7C/15/ https://jsfiddle.net/Vap7C/15/

    $(".clickable").click(function(e){
         s = window.getSelection();
         var range = s.getRangeAt(0);
         var node = s.anchorNode;
         
         // Find starting point
         while(range.toString().indexOf(' ') != 0) {                 
            range.setStart(node,(range.startOffset -1));
         }
         range.setStart(node, range.startOffset +1);
         
         // Find ending point
         do{
           range.setEnd(node,range.endOffset + 1);

        }while(range.toString().indexOf(' ') == -1 && range.toString().trim() != '');
        
        // Alert result
        var str = range.toString().trim();
        alert(str);
       });
<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
<p class="clickable">
Lorem ipsum dolor sit amet, consectetur adipiscing elit. Mauris rutrum ante nunc. Proin sit amet sem purus. Aliquam malesuada egestas metus, vel ornare purus sollicitudin at. Lorem ipsum dolor sit amet, consectetur adipiscing elit. Integer porta turpis ut mi pharetra rhoncus. Ut accumsan, leo quis hendrerit luctus, purus nunc suscipit libero, sit amet lacinia turpis neque gravida sapien. Nulla facilisis neque sit amet lacus ornare consectetur non ac massa. In purus quam, imperdiet eget tempor eu, consectetur eget turpis. Curabitur mauris neque, venenatis a sollicitudin consectetur, hendrerit in arcu.
</p>

在IE8中,由于getSelection而出现问题。这个链接(getSelection() 是否有跨浏览器解决方案? https://stackoverflow.com/questions/3076052/is-there-a-cross-browser-solution-for-getselection)可能有助于解决这些问题。我还没有在 Opera 上测试过。

I used https://jsfiddle.net/Vap7C/1/ https://jsfiddle.net/Vap7C/1/从一个类似的问题作为起点。它使用了选择.修改 https://developer.mozilla.org/en/DOM/Selection功能:

s.modify('extend','forward','word');
s.modify('extend','backward','word');

不幸的是,他们并不总能了解全部内容。作为解决方法,我得到了Range https://developer.mozilla.org/en/DOM/range用于选择并添加两个循环来查找单词边界。第一个不断向单词添加字符,直到到达空格为止。第二个循环转到单词的末尾,直到到达空格。

这也会捕获单词末尾的所有标点符号,因此请确保在需要时将其删除。

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

检测文本中哪个单词被点击 的相关文章

  • 如何通知 AngularJS 表单已由 jQuery 外部填写?

    我在 AngularJS 中有一个页面 其中有一个包含一些字段的表单 加载该页面后 我想要一个书签 单击该书签可根据配置文件中的数据填充字段 正在使用一个 JS 文件 该文件使用 jquery 来填充表单中的数据 当我做 id val ab
  • html画布绘图显示出来

    我确信这个问题在我还找不到答案之前就已经被问过 我想通过在顶部绘制另一个白色矩形来擦除黑色矩形的一部分 但是许多原始黑色矩形显示出来 就像正在平均一样 canvas document getElementById canvas contex
  • Vue 3:“defineProps”引用本地声明的变量

    为什么我收到警告错误消息 defineProps引用本地声明的变量 eslint vue valid define props 当我在 props 中使用自定义验证器时SFC
  • 锁定 contenteditable="true" div 中的元素

    我有一个用于用户输入的 contenteditable div 当单击按钮时 它会显示替换某些单词的选项 首先 它删除所有 html 并创建可以替换单词的 span 元素 这些词的标记不同 我面临一些问题 当直接在跨度之前或之后单击并键入文
  • Javascript 中繁重计算的最佳实践?

    我正在处理客户端脚本 需要进行繁重的计算 例如将大量对象推送到数组中 这会导致 JavaScript 停止响应并且浏览器挂起并发出警报 是否有任何最佳实践或设计模式来处理这些计算 我搜索并找到许多不同的方法来处理这些情况 但解决方案很难实现
  • 如何偏移网格项目,同时移动其兄弟项目? [复制]

    这个问题在这里已经有答案了 我正在使用 CSS 网格 我想偏移一个元素 以便它在网格列上水平移动 我还希望这个元素保留其当前宽度 并应用偏移值此外到元素的宽度 Example container display grid grid temp
  • 表单方法=“获取”漂亮的URL

    所以我使用这个 HTML 表单作为一个简单的搜索字段
  • 使用 Android 浏览器的 HTML5 离线存储

    我正在研究如何使用 Android 设备来创建需要离线使用的网站 我还没有找到很多关于Android浏览器如何处理HTML5的localStorage和WebSQL的信息 有人知道这些的尺寸限制吗 它们是否可以更改 我知道移动 Safari
  • 元视口标签似乎被完全忽略或没有效果

    我把这个标签放在了头部一个网页 http www belovedobjects de 由于某种原因 它在我的 iPhone 上似乎被忽略了 甚至添加了user scalable no没有影响 我尝试了许多宽度 初始比例等值 似乎没有任何效果
  • JQuery 从 Div 中抓取文本减去子元素[重复]

    这个问题在这里已经有答案了 有没有一种简单的方法可以从这个 div 中获取文本而不获取任何子元素 div strong Title Text Unwanted strong This is the text I need div 我知道我可
  • Chrome 无法识别我对 javascript 文件的更改并加载旧代码?

    我在这里坐了将近一个小时来测试我正在构建的网站 由于我想查看代码中的新更改 因此我重新加载了代码 但它正在重新加载旧代码 我打开了 devetools 进行硬重新加载和清空缓存硬重新加载 它们都加载我的旧代码 我进入隐身模式 它做了同样的事
  • Ember JS 过渡到嵌套路由,其中​​所有路由都是视图中的动态段

    我们正在使用 EmberJS 编写一个应用程序 然而 我们对这个框架仍然陌生 我们很难解决一些看似简单的问题 模型非常简单 有 3 个模型 Queue Task 和 Image 我们对所有路由使用动态 URI 段 并且这些模型的路由嵌套在以
  • 从 Angularjs 应用程序中的 iOS Webview 调用 Javascript 函数

    我的问题是 当我尝试从 UIWebView 中调用 AngularJS 应用程序中存在的 javascript 函数时 该函数无法识别 当我在典型的 html 结构中调用该函数时 该函数会按预期被识别 下面提供的示例 目标 C void v
  • > 有必要吗?

    我现在开发网站和 XML 接口已有 7 年了 从来没有遇到过真正有必要使用 gt for a gt 到目前为止 所有消歧都可以通过引用来处理 lt and alone 有没有人遇到过这样的情况 与 SGML 处理 浏览器问题 XSLT 等相
  • NestJs:如何使 Body 输入形状与实体的 DTO 不同?

    我的照片和标签对象有 DTO 如下所示 export class PhotoDto readonly title string readonly file string readonly tags TagDto export class T
  • 多个 if else 条件的替代方法[关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 我有多个条件需要检查和执行 如下所示 if date current date source s3 table name Table1 else
  • 如何通过 JQuery Post 传递 Javascript 数组,以便可以通过 PHP $_POST 数组访问其所有内容?

    如何通过 JQuery Post 传递 Javascript 数组 以便可以通过 PHP POST 数组访问其所有内容 请展示一个可以实现此目的的代码示例 Thanks 如果你想传递一个 JavaScript 对象 哈希 即 PHP 中的关
  • 如何防止图像被裁剪

    我正在尝试创建一个包含很多图层的动画图片 为了在不同的屏幕上获得正确比例的图像 我使用covercss 属性值 我已经尝试过object fit对于图像和background size用于背景图像 这就是为什么我的宽屏幕图像被浏览器裁剪的原
  • 无限滚动 jQuery 和 Laravel 5 分页

    我成功从控制器返回数据 public function index posts Post with status verified gt paginate 30 return view show gt with compact posts
  • 什么是 Service Worker 控制台? & 它在 Chrome 浏览器中的什么位置?

    我正在研究推送通知并遇到一个陌生的术语 service worker console 我已阅读并使用过该术语console log or web console在浏览器中 但我不熟悉这个术语service worker console 之后

随机推荐

  • 在 VB6 应用程序中使用 .NET dll

    我在 c net 中编写了一个 dll 它在应用程序中调用另一个第三方 NET dll 当我使用用 c NET 编写的控制台应用程序以及使用以下代码对其进行测试时 效果很好 Assembly u Assembly LoadFrom dllL
  • 提取给定节点的所有父节点

    我正在尝试使用以下命令提取每个给定 GO Id 节点 的所有父级EBI RDF sparql 端点 https www ebi ac uk rdf services sparql 我是根据this https stackoverflow c
  • WCF 反序列化的对象属性的空值

    我有一个 WCF Web 服务used工作顺利 它在某处停了下来 我不知道为什么 代码和界面从未改变 web config 也没有改变 至少与 Web 服务部分无关 我有一堂课 DataContract public class QuizS
  • 更改 Qt 中的标签

    我正在尝试制作一个由按钮和标签组成的简单程序 当按下按钮时 它应该将标签文本更改为程序内 QString 变量中的任何内容 到目前为止 这是我的代码 这是我的 widget h 文件 class Widget public QWidget
  • 使用取消嵌套函数插入 - 跳过序列列中的数字

    我正在尝试在插入中使用 unnest 功能 这样做时 序列号会为每个插入跳过一个数字 请帮我解决这个问题 mydb d tab1 Table public tab1 Column Type Modifiers id integer not
  • 我们可以在一个 Android Studio 项目中拥有多个应用程序吗?

    我正在使用 Android Studio 来开发 Android 应用程序 但我听说在 Android Studio 中 最好在一个应用程序中只包含一个应用程序 每个应用程序一个项目 如果这是正确的 那么为许多项目打开许多框架将非常浪费 但
  • 为什么 are.filter(String) 也返回数字? [复制]

    这个问题在这里已经有答案了 我正在做一些小练习来保持我对 js 怪癖的了解 我尝试编写一些简单的过滤器 它返回一个新数组 其中包含某些元素 例如字符串 数字 ecc 当给定数组中也有数字时 我对 arr filter String 产生的结
  • 为什么 SQL 标准允许重复行?

    中的一个核心规则 http en wikipedia org wiki Codd 27s 12 rules对于关系模型来说 元组 行 所需的唯一性是 数据库中的每个单独的标量值must通过指定包含表的名称 包含列的名称和首要的关键包含行的值
  • 实现导航侧栏加载

    我正在尝试在左侧实现一个带有链接列表的导航侧边栏 a 这样 单击每个链接时 对应的 div 将被加载到右侧 当我有一个函数onclick财产在 a 它在浏览器控制台上给我错误 未捕获的引用错误 callFunction 未定义 这是我的实现
  • Git 工作流程和 Gerrit

    我正在尝试使用 Gerrit 实现 git flow 类型的工作流程 但我似乎无法弄清楚最后一块拼图 我的问题有两个先决条件 Gerrit 只会对一个分支执行合并 我不允许将合并提交推送到 Gerrit 更改获得批准后 合并必须由 Gerr
  • 将字符串“true”/“false”转换为布尔值[重复]

    这个问题在这里已经有答案了 我有一个 JavaScript 字符串 其中包含 true or false 我怎样才能将它转换为布尔值而不使用eval功能 var val string true 不区分大小写 const val string
  • 如何升级appium的chromedriver版本?

    尝试在 Chrome 版本 65 上运行 Appium 脚本时出现以下错误 selenium common exceptions WebDriverException 消息 未知错误 调用函数结果缺少 值 会话信息 chrome 65 0
  • 为什么viewDidLoad在swift中完成后没有显示数据? [关闭]

    Closed 这个问题需要调试细节 help minimal reproducible example 目前不接受答案 当我的应用程序启动完成后 UITableViewCell 上应该显示数据 但是 那里什么也没有 所以重新启动应用程序后
  • Eclemma 说 4 个分支中有 1 个未被覆盖,但它是哪个分支?

    有没有一种简单的方法可以告诉我缺少哪个分支 IE 我有一些这样的代码 if x y do stuff 在突出显示的覆盖范围中 Eclipse 中有一个黄点 上面写着 4 个分支中的 1 个缺失 但我想知道哪个分支丢失了 有一个非常简单的解决
  • 每当我尝试使用 Next.js 运行“npm run dev”时,都找不到错误模块

    每当我跑步时npm run dev我收到这个错误 我尝试过删除node modules并使用重新安装它npm install但这没有用 然后我尝试删除两者node modules and package lock json并重新安装它们 这
  • nix 构建守护进程是否保留构建日志?

    有时候跑步的时候nix build and nixos rebuild我发现了易于修复的问题 例如已弃用的警告或冗余导入 并且我认为 有趣 我也许能够在空闲时间解决这个问题 我知道我可以将构建日志重定向到一个文件 但我总是忘记这样做 直到再
  • 如何熟悉代码签名问题?

    每次当我处理代码签名和配置文件时 都会发生奇怪的事情 大多数时候我会收到错误 找不到代码签名身份 如果没有 则会出现 找不到匹配的配置文件 和 没有具有有效签名身份的配置文件 之类的错误 尽管我非常熟悉代码签名和配置背后的理论和事物 但我每
  • 结构体的指针运算

    给定一个包含 1 个 double 和 3 个 int 变量 总共 4 个变量 的结构体定义 如果 p 是指向该结构体的指针 其值为 0x1000 那么 p 的值为多少 这不是作业问题 所以不用担心 我只是想准备考试 但我无法解决这个练习题
  • 使用蓝牙调用应用程序

    我们可以使用蓝牙从一个 Android 设备中调用另一台 Android 设备中的应用程序吗 如果可以的话流程是什么 不 您不能从一个 Android 设备调用另一个应用程序 除非两个应用程序都使用蓝牙权限并进行配置
  • 检测文本中哪个单词被点击

    我正在构建一个 JS 脚本 该脚本在某个时刻能够在给定页面上允许用户单击任何单词并将该单词存储在变量中 我有一个非常丑陋的解决方案 并且涉及使用 jQuery 进行类解析 我首先解析整个 html 将所有内容拆分到每个空间上 并重新附加包含