在 JavaScript 中动态选择并添加标签

2024-03-06

我需要有关 iPhone 上的 JavaScript 的一些帮助UIWebView;
我有如下 HTML:

<html>
   <head>
      <title>Example</title>
   </head>
   <body>
     <span>this example for selection <b>from</b> UIWebView</span>
   </body>
</html>

我想进行选择,然后添加<span>在 HTML 中为所选文本添加颜色标记,就像电子书阅读器一样编写注释。

这是我的 JavaScript 代码,用于获取所选文本:

NSString *SelectedString = [NSString stringWithFormat:@"function getSelText()"
                     "{"
                     "var txt = '';"
                     " if (window.getSelection)"
                     "{"
                     "txt = window.getSelection();"
                     " }"
                     "else if (document.getSelection)"
                     "{"
                     "txt = document.getSelection();"
                     "}"
                     "else if (document.selection)"
                     "{"
                     "txt = document.selection.createRange().text;"
                     "}"
                     "else return;"
                     "alert(txt);"
                     "}getSelText();"];
[webView stringByEvaluatingJavaScriptFromString:SelectedString];

这效果很好,并返回我所选的文本。

还有这个用于添加新标签的 JS 代码:

NSString *AddSpanTag = [NSString stringWithFormat:@"function selHTML() {"
                 "if (window.ActiveXObject) {"
                 "var c = document.selection.createRange();"
                 "return c.htmlText;"
                 "}"
                 "var nNd = document.createElement(\"span\");"
                 "var divIdName = \'myelementid\';"
                 "var ColorAttr = \"background-color: #ffffcc\";"
                 "nNd.setAttribute(\'id\',divIdName);"
                 "nNd.setAttribute(\'style\',ColorAttr);"
                 "var w = getSelection().getRangeAt(0);"
                 "w.surroundContents(nNd);"
                 "return nNd.innerHTML;"
                 "}selHTML();"];
[webView stringByEvaluatingJavaScriptFromString:AddSpanTag];

我的问题是这样的:
如果我选择“示例”(查看 HTML 文本)文本WebView,它有效,因为它不包含任何标签。
但是如果我选择“选择”(查看 HTML 文本)文本WebView,它不起作用,因为它开始标签<b>, and </b>不在我的选择范围内,那么我无法在之间添加新标签<b> and </b>.

我怎么解决这个问题?


由于这是一个UIWebView,这是 Mobile Safari,您可能会丢失很多用于获取选择的分支。我建议使用document.execCommand()使用“HiliteColor”命令,该命令内置于浏览器中,即使跨元素边界也适用于整个选择:

var sel = window.getSelection();
if (!sel.isCollapsed) {
    var selRange = sel.getRangeAt(0);
    document.designMode = "on";
    sel.removeAllRanges();
    sel.addRange(selRange);
    document.execCommand("HiliteColor", false, "#ffffcc");
    sel.removeAllRanges();
    document.designMode = "off";
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

在 JavaScript 中动态选择并添加标签 的相关文章

  • 将 PhotoSwipe 配置为不使用整个窗口?

    我目前正在尝试使用构建移动图片库照片滑动 http photoswipe com 我已经能够让它工作了 但有一个小问题 当我 单击照片缩略图 实际照片总是占据整个 视口 当您在移动设备上查看图库时 这是可以的 但是 如果您的视口是计算机屏幕
  • 一键切换两个复选框,无需js

    有没有办法切换两个combined一键点击复选框 我有一个小日历 我想用复选框选择几周 一周可以是两个月 所以同一周我有两个复选框 我怎样才能安全地将它们结合起来 我正在使用这个抽象 HTML
  • 如何从数组中删除空数组值(“”)?

    我有一个二维数组 是用 jQuery 从 html 表生成的 但有些值是空的 所以 被展示 如何删除空值 table tr th 1A th th 1B th th 1C th tr tr td 2A td td 2B td td 2C t
  • 为响应中的特定槽位提供槽位值并恢复对话

    我正在处理 lex 并希望在响应中给出槽值 只有当用户在前一个槽值中输入特定输入时才会询问该值 我正在尝试一些事情 但我不这样做 我做得对还是错 我在 lex 中有以下插槽 出发城市 到达城市 出发 单程或往返 归期 日期 出发日期 航班时
  • IE 抛出 JavaScript TypeError 但在 chrome 上不抛出

    描述在我们的 Magento 购物车上 当用户单击添加到购物篮在任何 Internet Explorer 浏览器的 产品详细信息 页面上单击按钮 浏览器中都会弹出一个包含以下错误消息的窗口 异常 类型错误 无法获取未定义或空引用的属性 ta
  • 如何从我的应用程序打开“设置”应用程序? [复制]

    这个问题在这里已经有答案了 在我正在开发的 iPhone 应用程序中 用户需要通过设置应用程序输入一些配置 然后我的应用程序才能连接到服务器并运行 现在 当用户首次启动我的应用程序时 我会显示一条警报 解释用户应该转到设置 输入配置详细信息
  • 提交表单问题... Enter key

    我有一个包含几个下拉列表和一个文本字段以及一个按钮的表单 当我单击按钮时 将调用 ajax 函数 ajax 然后调用一个 php 函数 该函数从 mysql 数据库获取结果 问题是我不能通过在表单中 按回车键来完成同样的事情 页面只会刷新
  • ionic 2 从 json 填充选择选项

    我正在尝试动态填充ion select带有 json 对象的下拉列表 我的 html 组件如下所示
  • Select2 基本示例不起作用

    我想得到select2使用 symfony2 脚本的库 我正在尝试实现提供的基本示例https select2 github io examples html https select2 github io examples html pa
  • 如何修复错误嵌套/未闭合的 HTML 标签?

    我需要通过使用正确的嵌套顺序关闭任何打开的标签来清理用户提交的 HTML 我一直在寻找一种算法或Python代码来做到这一点 但除了PHP等中的一些半生不熟的实现之外 还没有找到任何东西 例如 类似的东西 p p ul li Foo bec
  • 使用 CSS 定位文本节点

    我正在研究容器对象的 CSS 我大部分时间都在工作 具体来说 我正在查看测试用例 1 2 和 3 它们都有文本节点 有没有办法像对待任何子元素一样对待文本节点 有什么方法可以调整 CSS 以使文本节点及其兄弟节点正常工作吗 除非有一个 CS
  • 如何让 ckeditor 停止删除空 div

    stackoverflow 上也有类似的问题 但这些问题的答案对我不起作用 所以请不要将其标记为重复 在我的 cms 中 我希望人们能够添加 SPA 单页应用程序 内容页面 此类应用程序通常只有一个具有某些属性的 div 并且使用 java
  • 如何按高度对 DIV 进行排序?

    我有三个divs 我想按高度从最大到最小对它们进行排序 div smallest div div largest div div middle div 任何想法 这很简单 使用 sort http www wrichards com blo
  • 实现github.com文件无缝文件导航

    我刚刚在浏览 github 存储库时注意到最近的变化 当您选择文件或文件夹时 新文件会滑入并推出旧文件 使用 jquery 很容易做到这一点 但真正不同的是 URL 本身实际上发生了变化 因此书签仍然有效 我一直在努力为我正在开发的图书导航
  • 推迟 viewWillAppear 直到 webViewDidFinishLoad

    我有一个使用的应用程序UIWebViews在几个视图控制器中 这UIWebViews用于渲染本地生成的html 不需要慢速网络访问 为了节省内存 我只根据视图控制器的提示按需加载这些viewWillAppear打回来 并卸载屏幕外实例以响应
  • 计算 DIV 元素的最大/最小高度

    问题 给定一个具有固定高度的 DIV 元素 其中包含未知数量的子元素 这些子元素的大小相对于其高度 计算 DIV 可以调整大小的最大 最小高度 而不违反其子元素的任何最大 最小值元素 Example求 DIV A 的最大 最小高度 Answ
  • 使用 UIWebview 导航 Pdf 在 IOS 5 中不起作用

    我最近升级到 Xcode 4 我发现一个运行良好一年多的应用程序现在无法在 Ios 5 下运行 该应用程序在 UIWebview 中导航 Pdf 并使用以下代码移动到其中的任何页面pdf self pdfNavigateController
  • 0x800a138f - JavaScript 运行时错误:无法获取未定义或 null 引用的属性“值”

    我编写了一段 JavaScript 代码来比较 2 个文本框中的 2 个日期 function CompareDates var fdate document getElementById txtFromDate var edate doc
  • UISlider 可捕捉到固定的步数(如 iOS 7 设置应用中的文本大小)

    我正在尝试创建一个UISlider让您可以从一组数字中进行选择 每个滑块位置应等距 并且滑块应卡入每个位置 而不是在它们之间平滑滑动 这是滑块的行为Settings gt General gt Text Size 这是在 iOS 7 中引入
  • 鼠标悬停在图像上显示 x

    我想在图像上显示 X 标记 尺寸为 24x24 为此我采用 li 元素和 in 元素 li style display inline block background 283038 border 1px solid 161b1f margi

随机推荐

  • 两个不同的JSON源,不同时间更新;在 ng-Repeat 列表中使用结果

    我正在尝试从两个单独的 JSON 源创建状态列表 该列表将显示第一个来源的一般信息 并根据第二个来源的人数显示状态颜色 第一个源包含不会发生太大变化的一般数据 即提要名称 版本 描述 并且可能每天仅调用两次 请参阅下面的代码示例 元数据 d
  • Flexbox 列拉伸以适合内容[重复]

    这个问题在这里已经有答案了 各位开发人员大家好 我想创建一个允许内容从上到下 从左到右排列的容器 父容器需要拉伸以适应但在最大定义值之内 我为此目的使用了 flexbox 但是我没有让父容器拉伸以适应 有没有人有任何建议 而不必用 java
  • Karaf OSGi 中无法加载 ScriptEngineManager 和 ScriptEngine(未找到 Nashorn)

    我正在尝试使用ScriptEngineManager and ScriptEngine使用 Java 执行一些 JavaScript 代码 我使用 Java 8 在 Karaf OSGi 下执行此代码 我使用的示例在示例 Java 类中运行
  • MS Access 表:纠正 Zip_CD 字段中的非前导零

    我在休完长假后回到 Access 但遇到了一些困难 我有一个包含邮政编码字段的表 提供的某些邮政编码是 5 位数字 52186 有些是带有尾随社区代码的 10 位数字类型 77005 1568 然而 前导零尚未保留 我需要重新插入它们 例如
  • 画布消耗大量内存

    我在使用覆盖层打开的 Canvas 实现时遇到困难 canvas 元素宽 760px 高 2640px 我知道 别问 我每隔 27 5 像素高画一条线 ctx moveTo 0 y ctx lineTo 760 y ctx strokeSt
  • 使用非默认 AlgorithmIdentifier 解密 EnvelopedCms

    我正在尝试解密信封内容管理系统 https msdn microsoft com en us library system security cryptography pkcs envelopedcms v vs 110 aspx使用非默认
  • GCC 的 __attribute__((__packed__)) 是否保留原始顺序?

    Purpose 我正在用 C 编写一个网络程序 具体来说gnu89 我想通过重新解释某个特定的内容来简化事情struct X作为大字节数组 又名char 通过网络发送字节 并将它们重新解释为struct X另一方面 为此我决定使用 gcc
  • Laravel 密室未经身份验证

    我在我的项目中使用 Laravel sainttum 以 Angular 作为前端 第二个 api 请求未经身份验证 请让我知道我哪里出错了 前端 gt 127 0 0 1 4200 后端 gt 本地主机 8888 env 配置 SESSI
  • 处理空手道 UI 场景中的基本身份验证

    我刚刚开始实现空手道 UI v0 9 5 已经使用空手道实现了 api 测试 并且效果完美 遵循此页面上的 HTTP 基本身份验证策略 https github com intuit karate http basic authentica
  • 想要在运行 Cucumber 之前加载种子数据

    我希望黄瓜在开始测试之前将我的种子数据加载到 db seeds rb 中 不是在每个场景或功能之前 而是在运行测试之前仅一次 而且在每个场景之后 种子必须保留在数据库中 那可能吗 我尝试创建一个文件 features support see
  • 对于 MVC 4,Microsoft.AspNet.Mvc 和 System.Web.Mvc 之间有什么区别?

    我有自己的服务器 并且正在考虑将我的解决方案之一升级到 ASP NET MVC 4 然后再升级其余的 3 作为其中的一部分我下载了独立安装程序 http www microsoft com en us download details as
  • “ui-state-hover”效果的问题

    我有一个html div class portlet header a href class ui icon ui corner all ui state default span class ui icon ui icon minusth
  • 如何在 Emacs 中搜索第 n 次出现的模式?

    我正在尝试尽可能避免使用 elisp 我认为我能够在 Elisp 中实现我的问题的解决方案 但这不是我想要的 I am looking for the nth occurence of a string in a buffer For in
  • Vega-Lite:数据中的描边颜色值?

    在 Vega 中 可以从数据中获取颜色值 如下所示 维加的例子 https vega github io editor url vega N4KABGBEAkDODGALApgWwIaQFxUQFzwAdYsB6UgN2QHN0A6agSz
  • 在 config.py 中提供全局配置变量的最 Pythonic 方式? [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 在我对过于复杂的简单事物的无尽追求中 我正在研究最 Pythonic 的方法来在典型的 配置文件 在 Python Egg 包中找到 传统方式
  • 如何备份每个表100行的数据库?

    我想备份包含所有对象和数据的 SQL Server 数据库 但所有表中的数据应限制为每个表 100 行 我可以在 mysql 中很容易地做到这一点 但在 SQL Server 中我不知道该怎么做 你不能真正使用显式的BACKUP DATAB
  • WAS 8.5,如何避免注释扫描?

    我们在WAS 8 5 0 0上部署一个Web应用程序 我们使用PARENT LAST类加载器 由于某种原因我们必须这样做 在启动过程中 有一些警告 12 16 14 17 19 15 088 CST 00000048 InjectionPr
  • 具有固定边数的最短路径

    在高效的时间内找到通过图形的最短路径 并附加该路径必须完全包含的约束n nodes 我们有一个有向加权图 它可能包含也可能不包含循环 我们可以使用 Dijkstra 算法轻松找到最短路径 但 Dijkstra 算法不保证边的数量 我们能想到
  • 如何动态更改xsl:output方法属性值?

    我想使用相同的 xslt 并针对不同的输出 即 xml html xhtml 和文本 进行测试 当然我正在这样做
  • 在 JavaScript 中动态选择并添加标签

    我需要有关 iPhone 上的 JavaScript 的一些帮助UIWebView 我有如下 HTML span this example for selection b from b UIWebView span 我想进行选择 然后添加