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退格和删除文本节点问题 的相关文章

  • less.js - 在解析器回调中获取变量值

    我正在使用 less js 1 3 0 在客户端将 less 解析为 css 在解析器的回调中 我想获取每个变量的值 我尝试了以下方法但没有成功 var data colour red example background color co
  • Ajax JSON 数据和灯箱冲突

    我有一个带有灯箱插件的画廊设置光廊 http sachinchoolur github io lightGallery docs 该画廊与静态 HTML 完美配合 当我动态抓取 API 数据并尝试让灯箱处理这些项目时 问题就出现了 我似乎无
  • nodejs mocha suite 未定义错误

    我正在尝试使用摩卡运行一些测试 但似乎无法克服这个错误 E tdd nodejs cart gt mocha cart test js node js 201 throw e process nextTick error or err Re
  • 使用php表单更改href链接

    我正在制作一个带有搜索栏的网站 我想让搜索栏在 搜索 并显示结果后具有交互性 所以我希望 href 根据正在使用的 Id 进行更改 例如 有人搜索 Pinecones 如果它在数据库中 它将有一个 ID 在本例中是 4 一旦他们搜索它 它就
  • 使用 PHP 获取 2 个同名 HTML 输入标签的值

    假设我有下表
  • 将上部字符转换为下部字符,将下部字符转换为上部字符(反之亦然)[重复]

    这个问题在这里已经有答案了 我需要将某些字符串中的所有较低字符转换为较高字符 并将所有较高字符转换为较低字符 例如 var testString heLLoWorld 应该 HEllOwORLD 转换后 在不保存临时字符串的情况下实现此目的
  • 获取 JSON 中的 HTML 以在 React 组件中呈现为 HTML

    试图找出如何让链接实际呈现为链接 现在 在我从 Json 文件中读取这行文本后 React 将超链接渲染为文字文本 而不将其渲染为链接 一些数据 json about John has a blog you can read a href
  • Javascript 正则表达式来匹配正则表达式

    我正在研究一个特殊的正则表达式来匹配 javascript 正则表达式 现在我有这个正则表达式工作 i g m 例如 foo match i g m gt foo foo undefined foo i match i g m gt foo
  • 如何在表格的 tbody/thead 部分周围创建边框?

    我正在尝试创建一个包含表格数据的页面 该页面必须显示为多个表格 然而 我有两个相互冲突的要求需要解决 每个表格周围都必须有边框 每个表格的列宽必须能够根据内容重新调整大小 但是 所有表中的列宽必须一致 即列的大小基于所有表中该列中最大的单元
  • jQuery 在 Chrome 下发现错误元素

    我使用 jQuery 迭代 HTML 表 并动态填充每行的行号 通过在文本框中填充行号 function updateRowNums myTable find tr each function index this find input i
  • 如何使用CSS将背景图像放入选择选项标签中

    我有一个从 json 响应接收的国家 地区下拉列表 并且想要在国家 地区名称旁边添加相应的国家 地区国旗图标 也从 json 响应获取图像 我已经尝试了不同的 jQuery 和 bootstrap 插件 但他们所做的是破坏我以前的选择框样式
  • 如何检查 Map 或 Set 是否为空?

    对于 JavaScript 中的传统对象 使用以下命令很容易检查它是否为空 Object keys method const emptyObj console log Object keys emptyObj length 0 true i
  • 如何设置在浏览器的新选项卡(_blank)中打开的pdf文件的标题

    这是我的尝试 是否在新选项卡上打开 但它总是显示test pdf如题 function titlepath path name alert path alert name document title name window open pa
  • 自定义 WP 主题时,我应该将导航栏放在“”标签之前还是之后?

    我正在通过制作子主题来自定义 WP 主题 我将 Bootstrap 中的导航栏放入子主题目录中的 header php 文件中 但是 我不确定在哪里放置导航栏代码 我可以把它都放在前面and之后标记成功 例如 无论我选择哪一个 导航栏都显示
  • 如何查看网站浏览者的操作系统?

    我运行的是 Ubuntu 8 04 最近在访问网站时收到以下错误 请使用运行 Windows 98 2000 Me NT 或 XP 的计算机返回 www site com 网站如何知道我正在运行哪个操作系统 是仅通过 javascript
  • D3v6 嵌套图 - 嵌套 join()?

    我想可视化每个节点的 孩子 洞察力 我猜 D3v6 join 函数可以嵌套 不幸的是我找不到任何例子 下面的代码片段包含一个具有 3 个节点和子节点作为属性的outerGraph 到目前为止 这些孩子还没有被使用 相反 innerGraph
  • javascript:window.print() 打印 2 页,而我有 1 页

    我有一个简单的 HTML 文档 其中仅包含图像标签 我想在文档加载后打印图像 我的代码 img src form1 jpg alt form1 style margin 0 auto display block 它可以工作 但问题是它打印图
  • 允许使用 grunt browserify 进行全局转换

    我已将 jQuery 添加为 html 文件中的脚本标记 并将其添加到package json与一起工作browserify shim如下 browserify transform browserify shim browserify sh
  • WooCommerce 使用 AJAX 设置购物车数量?

    我已经为此绞尽脑汁好几天了 需要一些指导 我正在为 WooCommerce 网站完全从头开始制作自定义主题 现在我正在尝试让购物车功能正常工作 我一直试图使用按钮 来更新购物车中产品的数量 对我来说问题似乎是WC 我在functions p
  • Nodejs 一个接一个地运行异步函数

    我是 JS nodejs 的新手 所以如果我不能提出切中要害的问题 请原谅我 所以基本上 如果我有两个异步函数 async function init async function main 如何确保在 init 完成其异步请求后调用 ma

随机推荐