JS:获取contentEditable div中所有选定节点的数组

2023-12-03

你好,我使用 contentEditable 已经有一段时间了,我想我已经很好地处理它了。我回避的一件事是如何获取对部分或完全在用户选择范围内的所有节点的引用数组。有人有主意吗?

可以从以下几点开始:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<script type="text/javascript">
function getSelectedNodes(){
    var sel = window.getSelection();
    try{var frag=sel.getRangeAt(0).cloneContents()}catch(e){return(false);}
    var tempspan = document.createElement("span");
    tempspan.appendChild(frag);

    var selnodes = Array() //<<- how do I fill this array??
    var output = ''
    for(i in selnodes){
        output += "A "+selnodes[i].tagName+" was found\n"
        //do something cool with each element here...
    }
    return(output)
}
</script>
</head>

<body contentEditable="true" onkeypress="return(keypress(event))">
<div>This <strong>div</strong> is <em>content</em> <span class='red'>editable</span> and has a couple of <em><strong>child nodes</strong></em> within it</div>
<br />
<br />
<a href="#" onmouseover="alert(getSelectedNodes())">hover here</a>
</body>
</html>

这是一个为您提供实际选择和部分选择的节点而不是克隆的版本。或者你可以使用我的Rangy图书馆,其中有一个getNodes()其 Range 对象的方法,适用于 IE

function nextNode(node) {
    if (node.hasChildNodes()) {
        return node.firstChild;
    } else {
        while (node && !node.nextSibling) {
            node = node.parentNode;
        }
        if (!node) {
            return null;
        }
        return node.nextSibling;
    }
}

function getRangeSelectedNodes(range) {
    var node = range.startContainer;
    var endNode = range.endContainer;

    // Special case for a range that is contained within a single node
    if (node == endNode) {
        return [node];
    }

    // Iterate nodes until we hit the end container
    var rangeNodes = [];
    while (node && node != endNode) {
        rangeNodes.push( node = nextNode(node) );
    }

    // Add partially selected nodes at the start of the range
    node = range.startContainer;
    while (node && node != range.commonAncestorContainer) {
        rangeNodes.unshift(node);
        node = node.parentNode;
    }

    return rangeNodes;
}

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

JS:获取contentEditable div中所有选定节点的数组 的相关文章

  • 如何将查询参数添加到守卫中的路由并将其传递给 Angular 4 中的组件?

    我在我的 Angular 4 应用程序中使用路由保护 如果条件满足并返回 true 我想向路由添加一个查询参数 这是我一直在研究的代码 Injectable export class ViewGuardService implements
  • “move(-1)”作为 AngularJS 表达式有什么问题吗?

    我收到此错误 parse ueoe Unexpected end of expression move 从这段代码来看
  • 使用 jquery 更改锚文本和图标

    我有一个隐藏或显示 div 的锚标记 但我无法更改它的文本和图标 如何更改文本和图标标签 因为目前它将图标标签解析为常规文本 锚标记 a class collapse info btn i class icon arrow up icon
  • 使用淘汰赛动态显示/隐藏元素

    我有一个表 有四列 即代码 名称 数量和价格 其中 我想动态更改数量列的内容 元素 通常 它应该显示其中显示数量的元素 当用户单击元素时 我想显示该元素 以便用户可以编辑数量 我正在尝试按照 示例2 来实现淘汰赛文档链接 http knoc
  • dc lineChart 单击时弹出数据点信息

    我正在尝试检测折线图数据点上的点击 Per this answer dc scatter plot binding onClick event https stackoverflow com a 22772340 1873386 I am
  • 如何将OpenLayers多边形坐标转换为纬度和经度?

    我正在使用开放层 https openlayers org en latest examples draw freehand html绘制多边形并保存坐标的技术 这是我的代码 var raster new ol layer Tile sou
  • Google 地图 Javascript v3 折线点击事件

    我正在尝试显示一张地图 其中有多条路线布置为折线 单击多段线时 我想显示特定于该线的数据 将数据与线关联不是问题 但无论单击哪条线 显示的数据都会与最近绘制的线关联 就好像每条新折线都会覆盖最后一条线一样 我有一个数据库 其中包含 gpx
  • 将屏幕宽度获取到 javascript 变量中并通过 ajax 将其发送到 php 页面以避免页面加载

    这是JS检测我的页面命名上的屏幕分辨率index html并将其发送到 php 以便可以使用以下方式检索值 GET 这是我的PHP文件命名的内容process php
  • Flask 和 Reactjs 抛出 JSX 转换错误

    我已经开始将 ReactJS 与 Python Flask 后端结合使用 通过 Flask 渲染模板时 我在 Chrome 控制台中收到以下客户端错误 错误 找不到模块 jstransform visitors es6 templates
  • 输入字段名称以数字开头

    我有一个输入字段 其名称是 MD5 字符串 例如
  • Firefox 上的 jquery 焦点未设置

    我想将焦点设置到我的文本区域 以下是我的代码 this textInput val show focus 但它不起作用 实际上 当我按下鼠标按钮时 它会出现 但是当我松开鼠标时 它会从文本区域中删除 因此 经过大量搜索后 我发现 setTi
  • IE9 中的无效字符 DOM 异常

    以下这段 JS 曾经在 IE8 中工作 现在在 IE9 中失败 document createElement 我收到以下异常 SCRIPT5022 DOM 异常 INVALID CHARACTER ERR 5 上面这段代码是不是不符合标准呢
  • 如何使用 API 中的数据填充选择的下拉元素 - ReactJS

    我对 React 还很陌生 我正在从 API 获取数据 当我检查控制台日志时可以看到数据 但是我不知道如何使用 map 创建一个新数组 然后选项元素可以使用该数组来显示货币代码 目前它填充下拉列表 但选项元素全部为空 结果显示为 NaN 下
  • 将 div 附加到另一个 div 的右侧

    我有一个 div 它就像一个容器 里面有 2 个图像 一张图像位于 div 的左侧 另一张图像位于右侧 我的容器是Bootstrap的容器 它们都用 div 包裹 并且div s position is fixed 我的问题是我无法找到要附
  • 从函数在 python 3 中创建全局变量

    我想知道为什么在函数结束后我无法访问变量 variable for raw data 代码是这样的 def htmlfrom Website URL import urllib request response urllib request
  • 禁用移动设备上的锚点菜单点击

    我使用嵌套列表作为带有子菜单项的菜单 我曾经这样做过 如果您将鼠标悬停在主菜单项上 子菜单项将通过将显示从无更改为块来出现 我决定让子菜单看起来就像是下拉的 并使用了 CSS 过渡 我遇到的问题是 在第一种方法中 如果您触摸 iPad 上的
  • 在画布上剪出圆形图像

    我正在使用 html5 canvas 并且我正在创建一个游戏 可以将您的脸部上传到游戏中 并将其用作主要角色 不幸的是 游戏中的角色是圆形的 就像笑脸一样 那么这将如何完成呢 是否可以拍一张照片 然后将其剪成一个圆 这样圆之外的任何东西都是
  • javascript 闭包和对象引用

    我的情况有点晦涩难懂 主要是因为我认为我已经掌握了闭包 所以基本上我想要的是将集合重置为默认值 假设我有一个集合 它具有带有对象参数数组的构造函数 var c new collection x y z 然后集合定期更新 因为我没有保留数组的
  • HTML 标签在 Ionic 5 警报文本中不起作用

    我已将以下代码从 Ionic 3 迁移到 Ionic 5 const alert await this alertCtrl create subHeader About b this user name b message Test Mes
  • 文件和目录条目 API 在 Chrome 中损坏?

    我正在尝试使用文件和目录条目 API 创建一个文件上传器工具 该工具允许我将文件和目录的任意组合放入浏览器窗口中 以供读取和上传 我完全意识到 可以通过使用文件输入元素来实现类似的功能webkitdirectory已启用 但我正在测试一个用

随机推荐

  • 如何在shell脚本中使用加密和解密的密码

    我正在编写一个 shell 脚本 它执行需要密码的命令 我无法在脚本中以纯文本形式输入密码 我读到了 openssl 加密解密机制 但为了再次加密文件 我需要一个密码 我又无法将其放入脚本中 我不知道让脚本使用安全密码执行命令的最佳方法是什
  • 如何使用 Trollop 制作 Ruby 脚本进行命令行解析? [关闭]

    Closed 这个问题需要多问focused 目前不接受答案 我最近开始使用Trollop 一个干净而优雅的命令行选项解析器 适用于我所有基于 Ruby 的小型命令行 hack 我发现它确实很容易使用 但入门很困难 尽管有很好的在线文档 但
  • 如何通过python使用gensim的word2vec模型计算句子相似度

    根据Gensim Word2Vec 我可以使用gensim包中的word2vec模型来计算2个单词之间的相似度 e g trained model similarity woman man 0 73723527 然而 word2vec 模型
  • CSS 中的媒体片段 URI 替代方案?

    因此 我希望使用 Sprite Sheet 在 CSS 中制作背景图像 澄清一下 不 我不会去这个效果 我有一个完整的精灵表 我想在该表上取一个 16px x 16px 的正方形 并将其设置为将重复的背景 在未来的某个时候 我希望能够通过在
  • 在java中生成唯一ID的最佳方法

    在java中生成唯一ID的最佳方法是什么 人们一般使用 String id System currentTimeMillis someStaticCounter 但这种方法需要在多线程应用程序中进行同步 我在用 try Thread sle
  • 在html表中动态显示哈希数组?

    我有一个名为 products 的数据库 其中有一个使用 hstore 的字段 称为data 目前 在我的 index html haml 中 我只是循环浏览产品并显示它们data作为哈希 products each do product
  • 使用 openpyxl 可以实现更精确的图像放置吗? (像素坐标而不是单元坐标?)

    我正在尝试复制和自动化工作中常用的实践 我正在尝试在 openpyxl 的单元格中放置多个图像和文本 但是我只能将图像锚定到单元格的左上角 并且还没有找到比这更准确定位的方法 所以它们最终会与彼此和文本重叠 from openpyxl im
  • Xamarin Forms:在 IOS 中的 UI 中,相机图片向左旋转

    从 IOS 相机拍摄的照片在 UI 中显示时左旋转 我已经遇到过此类问题并通过此解决了thread 但在这种情况下 我只保存image path列出 相机代码 public async void OpenMyCamera try List
  • 最后一个孩子不工作 css/html

    我试图有一排四个 div frontpage width 240px margin bottom 20px margin right 50px float left webkit box sizing border box moz box
  • 用于绘制图形和滚动的面板

    我希望能够使用Panel或类似的方法将图形绘制到 Winform 上 如果图形变得大于控件 我似乎看不到任何有关添加滚动条的信息 是否可以用a来做到这一点Panel或者是否有类似的控件允许它 将 AutoScroll 属性设置为 true
  • 读入文件中以特定字符开头的每一行

    我正在尝试读取以 X 开头的文件中的每一行 我不想读取 X 本身 而只是读取接下来的行的其余部分 with open hnr1 abc r as file f file read id for line in f if line start
  • 在 Google 日历中添加和保存活动的链接

    我正在尝试创建一个在我的 Google 日历中添加活动的链接 继较早的条目之后 添加到 Google 日历的链接 我已经能够做到这一点 但它会将我带到一个页面 我必须按 保存 按钮才能结束该过程 是否可以添加参数来添加事件而无需按 保存 按
  • 如何使用VBA中的循环函数填充多个文本框

    我用 VBA 制作了一个带有许多文本框的用户界面 我读了一张 Excel 工作表 并将该工作表的所有值放入用户界面的所有文本框中 因此用户可以修改这些值 然后将其保存在 Excel 工作表中 因为我们不能像数组一样命名文本框 textBox
  • IE7下有两个同名的cookie怎么办?

    一些背景 除了 PHPSESSID 之外 CakePHP 还写入它自己的会话 ID cookie 这用于验证请求 然后 SWFupload 发送一个文件和该令牌进行身份验证 并被选为新的用户代理 因此在 cakephp 中 您必须禁用 ch
  • 具有命名空间解组功能的 JAXB(使用 REST 服务中的 Jersey)

    我正在尝试从 Convio 的公共 api 解组一个简单的 xml 文档 我没有收到以下代码的任何编译器错误 但它也不会产生结果 这些值为空 如果我从 xml 文档中删除架构和命名空间项 并从 POJO 中删除命名空间属性 那么它将运行得很
  • plot_surface : 获取写在右下角的 x,y,z 值

    我是 matplotlib 的新用户 使用 matplotlib 和plot surface 绘制曲面 3D 时 会出现一个带有图形的窗口 在该窗口中 右下角有鼠标实际位置的坐标 是否可以访问这些值 我在互联网上搜索过 但提出的解决方案很少
  • 新版本的c++

    C 是否会推出新版本 何时推出 C C 0X 的创建者常见问题解答 http www2 research att com bs C 0xFAQ html 问题 C 0x什么时候成为正式标准 但 C 0X 确实在某种程度上存在于各种编译器中
  • 如何在Three20的AppDelegate中添加全局右栏按钮(UINavigationController)

    我想在全局 AppDelegate 中添加一个全局右栏按钮 这样我的所有视图控制器都会自动具有此按钮 我在AppDelegate中添加了 navigator window rootViewController navigationContr
  • 将具有重复字符的字符串拆分为列表

    我对正则表达式没有太多经验 但我已经阅读了很多相关内容 假设有一个字符串s 111234 我想要一个列表 其中字符串分为L 111 2 3 4 我的方法是让一组检查它是否是数字 然后检查该组是否重复 像这样的东西 L re findall
  • JS:获取contentEditable div中所有选定节点的数组

    你好 我使用 contentEditable 已经有一段时间了 我想我已经很好地处理它了 我回避的一件事是如何获取对部分或完全在用户选择范围内的所有节点的引用数组 有人有主意吗 可以从以下几点开始