contenteditable div退格和删除文本节点问题

2024-03-11

contenteditable div 以及删除可编辑 div 内的 html 和/或非内容可编辑内容存在很多问题。

使用优秀 Tim Down 的回答:如何删除具有 contentEditable 属性的 div 内的 HTML 元素? https://stackoverflow.com/questions/2177958/how-to-delete-an-html-element-inside-a-div-with-attribute-contenteditable

使用蒂姆的代码,整个文本节点被删除。我需要它像任何文本区域一样工作,逐个字符删除并确保 html 元素也可以退格。

我尝试了以下方法

else if(node){
var index = node.length-1;
if(index >= 0)
node.deleteData(index,1);
else
this.removeChild(node);
}

但这显然无法正常工作。如果我读完内容,一切都会按预期进行。但如果我将光标放在其他地方,它仍然会从末尾删除。

我现在迷路了,非常感谢任何帮助

http://jsfiddle.net/mstefanko/DvhGd/1/ http://jsfiddle.net/mstefanko/DvhGd/1/


在详细分析了 google 如何在 google plus 用户标记中使用 contenteditable div 后,我找到了一个更合理的解决方案。也许它会帮助别人。

添加1个标签后,您已经可以看到html浏览器与浏览器之间的很多差异。

在 Google Chrome 中,每个标签都会添加一个空格。使用按钮标签。并且使用仅限 chrome 的 contenteditable="plaintext-only" 。

当我在 chrome 中退格空格时,会附加一个 BR 标签。

在 Firefox 中,BR 标签会立即添加到第一个标签中。不需要空格。并且使用输入标签代替按钮标签。

BR 标签是我在深入研究这一问题时取得的最大突破。在添加此功能之前,删除标签以及焦点问题存在很多奇怪的行为。

在IE中,做了更多有趣的改变。这里的标签使用了 contenteditable false 的跨度。没有空格或 BR 标签,而是一个空文本节点。

有了这些,你就不必完全复制谷歌了。

重要部分:

如果您要渲染 HTML,请执行以下操作...

1. Chrome应该使用button标签

2. Firefox/IE应该使用input标签

对于范围/选择,您通常希望将标签之类的东西视为单个字符。您可以将其构建到范围/选择逻辑中,但输入/按钮标签的行为更加一致,并且代码更少。

使用跨度,IE 在 IE7-8 中表现更好。仅从用户界面的角度来看。但是,如果您不关心您的网站在旧版 IE 中是否美观,则输入在 IE 和 Firefox 中具有正确的行为。

3. 仅适用于 Chrome,请在可编辑 div 上使用 contenteditable="plaintext-only" 属性。

否则,不仅当用户尝试粘贴富文本时,而且在删除 html 元素时,有时样式可能会转移到 div 时,会发生很多奇怪的问题,我注意到了许多与此有关的奇怪问题。

4. 如果需要将插入符号位置设置到 div 的末尾,请将范围的末尾设置在 BR 之前。

对于火狐浏览器:

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

contenteditable div退格和删除文本节点问题 的相关文章

  • Flot 中轴的逗号分隔数字

    有没有办法让 Flot 使轴编号以逗号分隔 例如 用 1 000 000 代替 1000000 您可以通过使用轴的tickFormatter 属性来做到这一点 xaxis tickFormatter function val axis in
  • 如何在 Rollup 中配置从多个输入文件仅生成单个输出文件?

    配置Rollupjs生成库时 如果输入是由多个javascript文件组成的数组 我们如何才能将这些输入生成为一个输出 js 文件呢 export const lgService input src app services livegiv
  • Phonegap html5视频无法播放

    我正在尝试在 iPad 上的phonegap 应用程序中播放视频 该视频给了我错误 MEDIA ERR SRC NOT SUPPORTED 我尝试播放的视频不是本地的 当我在该视频上使用curl I 时 这是它带来的信息 HTTP 1 1
  • 在 Angular 中将图像 url 转换为 base64

    我正在努力尝试将给定的图像 url 转换为 base64 在我的例子中 我有一个带有图像路径的字符串 var imgUrl assets logoEmpresas empresa logoUrl 我如何直接将给定的图像网址转换为base64
  • TypeScript 中类似字典的对象应使用什么类型?

    在 TypeScript 中 我有时会使用期望 或返回 对象的函数 其中这些对象被视为字典 基本上我的问题是 这里使用的正确类型是什么 我可以用 Record
  • JS 是否支持使用键函数而不是比较器进行排序?

    JavaScript 的array sort https developer mozilla org en US docs Web JavaScript Reference Global Objects Array sort Syntax方
  • Postman如何发送请求? ajax,同源策略

    我发现了这个非常有用的 Chrome 扩展程序 名为 Postman 这是一个非常有用的扩展 特别是当您正在编写 RESTful 应用程序时 我感到困惑的一件事是这个插件 扩展如何能够在不同的域上成功发送 POST 请求 我尝试像这样使用
  • jQuery:在方法上取消绑定 jQuery 2.0

    在 jQuery 1 9 中live 已被弃用 因此新方法变为 document on mouseover blahblahfunc 我无法解除 blahblahfunc 的绑定 通过 unbind mouseover mouseout c
  • CKFinder 如何在选择图像(文件:选择)时获取尺寸 URL 和尺寸(宽度/高度)?

    我正在使用 CkFinder 3 成功上传图像后 我需要能够在用户单击 选择 按钮后进行检测 文件名 ID url 原始图像的宽度和高度 目前我正在使用files choose但我找不到有关 cb 事件的信息 知道如何解决吗 代码示例将不胜
  • ReactJs / Typescript:如何扩展状态接口

    我有以下内容 interface EditViewState
  • 有没有办法在 Blazor 中隐藏 div?

    我正在使用 Blazor 并且想在按下导航栏切换器图标时隐藏侧边栏 列表项崩溃了 但问题是 div 仍然存在 div class page div class sidebar div class nav top row pl 4 navba
  • 如何从对象 URL 获取文件或 blob?

    我允许用户通过拖放和其他方法将图像加载到页面中 当图像被删除时 我正在使用URL createObjectURL转换为对象 URL 以显示图像 我不会撤销该网址 因为我会重复使用它 所以 当需要创建一个FormData对象 以便我可以允许他
  • (jQuery) 在 cookie 中单击时保存复选框状态

    关于此功能有很多主题 但我似乎无法让它工作 我在谷歌上搜索了这个具体案例 有一堆链接让我来到这里 但奇怪的是我似乎无法让它们工作 我所做的唯一工作如下 http dl dropbox com u 2238080 a old z htm ht
  • 浮动的垂直对齐方式:左div的

    我有大约 10 个宽度相等但高度不同的 div 我希望它们尽可能紧密地组合在一起 当设置为向左浮动时 它们不会垂直彼此对齐 而是与上面 行 的底部对齐 我在下面模拟了一个小例子 想要去掉空白 你有什么建议吗 我仅限于使用这种格式 因为内容是
  • 在客户端将大文件(> 2GB)压缩为 ZIP

    我使用构建上传工具node js and socket io 因为他们通常会上传令人难以置信的巨大文件 而普通的上传表单将无法工作 问题是他们想在发送之前将文件压缩成zip 以提高传输效率 我一直在研究压缩方法 例如JSZip http s
  • 我的引导页面页脚下方的空白

    虽然我之前在身体下方确定了 50 像素的填充 但我仍然遇到页面页脚下方有一堆空白的问题 我是否只需要延长内容即可填充垂直空间 我第一次使用 bootstrap 来创建我的新网站 但我陷入了这个恼人的困境 这是一个有问题的页面的链接 http
  • 使用 php 将 HTML 输出转换为纯文本

    我正在尝试将示例 HTML 输出转换为纯文本 但我不知道如何操作 我使用 file get contents 但我尝试转换的页面返回的结果最相似 raw http localhost guestbook profiles php file
  • 使用 Azure Bot Framework Web 聊天无法单击电话号码

    Setup 我使用以下命令创建了一个 Azure QnA Web 聊天机器人QnAMaker https www qnamaker ai Azure 机器人服务 https azure microsoft com en us service
  • JavaScript 有内置的 stringbuilder 类吗?

    I see a few 代码项目解决方案 http www codeproject com KB scripting stringbuilder aspx 但是JavaScript中有常规的实现吗 如果您必须为 Internet Explo
  • Google Universal Analytics - 命令被忽略

    我正在使用 Google Universal Analytics 来跟踪页面浏览量 当我导航到具有 Google Analytics 网站实时功能的页面时 我可以看到 因此我的代码一定可以正常工作 然而 Chrome 一直在控制台中显示 I

随机推荐