如何在 contenteditable div 中输入时创建一个段落?

2023-12-23

我正在为我的一个项目制作一个简单的编辑器,我需要使用可编辑的 div 使用contenteditable财产。我需要两个功能:

  • 输入两次后自动插入小时
  • 创建一个段落而不是<br>进入并专注于它。

所以我写了这个(带着一些灵感),这是负责的代码的一部分:

var intercept = {
    keydown: function(e)
    {
        if( e.which == 13 ){
            intercept.enterKey.call(null, e);
        }
    },

    enterKey: function(e)
    {
        var $lastElm;

        // Find the previous elm
        if (document.selection) { // IE
            $lastElm = $(document.selection.createRange().parentElement());
        } else { // everyone else
            $lastElm = $(window.getSelection().anchorNode);
        }

        // Handle enter key
        if( !e.shiftKey )
        {
            // Check if two or more paragraphs
            // are empty, so we can add an hr
            if(
                $.trim($lastElm.text()) === "" &&
                !$lastElm.prev().is('hr')
            ){
                document.execCommand('insertParagraph', false);
                $lastElm.replaceWith($('<hr>', {contenteditable: false}));
            }
            // Or just add an paragraph
            else{
                document.execCommand('insertParagraph', false, true);
            }

            e.preventDefault();
        }
    }
}

这在 Chrome 中工作正常,但在 Firefox 中,它不会创建新的<p>元素,我认为它只是将当前文本包装在p这是不可能的,因为它已经在p。所以光标只是停留在 Firefox 中并且不会创建新段落。

您知道如何解决这个问题吗?
Thanks.


From Jquery you can use this method:

var html="";
var intercept = {
    keydown: function(e)
    {
        if( e.which == 13 ){
            intercept.enterKey.call(null, e);
        }
    },

    enterKey: function(e)
    {
        $("#append_id").html("");
        html+="your text";
        $("#append_id").html("<p>"+html+"</p>");
    }
}
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

如何在 contenteditable div 中输入时创建一个段落? 的相关文章

  • 将 jQuery 与 Selenium WebDriver 结合使用 - 如何将 JSON 对象转换为 WebElement?

    我正在使用 Selenium WebDriver 我想执行 jQuery 代码来查找一些元素 我的代码如下 public function uploadGrantDoc script return itemlist grant file u
  • 指定 HTML5 输入类型 = 日期的值输出?

    我想将本机日期选择器添加到我的应用程序中 该应用程序当前使用遗留的本地系统 日期输入支持尚未广泛普及 但如果我可以基于兼容性提供这两种实现 那就太理想了 有没有办法指定 HTML 日期选择器给出的值的输出 歌剧的默认设置是yyyy mm d
  • 修复 Raphaël 路径节点上 Tipsy 工具提示的位置

    这是一个非常具体且有些复杂的问题 所以我设置了一个最小测试用例 http reveal dk 8080 revealit dk tipsytest 在阅读本文的其余部分之前 您可能应该先了解一下 我的页面显示悬停时突出显示区域的图像Raph
  • 为什么Promise中的代码会同步执行? [复制]

    这个问题在这里已经有答案了 在我的项目中 我有一个很长时间运行的操作 所以我决定将其放入Promise因为我认为这样我就可以在里面的代码继续执行其他操作Promise正在跑步 调试的时候发现外面的代码Promise仅当里面的代码执行Prom
  • jQuery 模板:使用 AND 运算符创建条件语句

    这有效
  • 如何将焦点设置在 BootStrap 中的第一个输入字段上? [复制]

    这个问题在这里已经有答案了 可能的重复 如何将焦点设置到独立于 id 的 HTML 表单中的第一个输入元素 https stackoverflow com questions 277544 how to set the focus to t
  • 等待异步 grunt 任务完成

    我收到了 grunt 设置 其中一个新任务应该执行 grunt task run 已经存在的任务 要执行的任务是异步的 新任务应该等待异步任务完成 执行此操作的首选方法是什么 grunt 已经涵盖了这一点 你应该将你的任务声明为异步任务 并
  • 使用 eval 时不会受到 XSS 威胁

    我正在制作 不是现在 但我仍然对这个感到好奇 一款使用 HTML5 和 JS 的游戏 我想要的是人们可以插入自定义脚本 但要安全 function executeCustomJS code eval code bad 当然这段代码非常糟糕
  • 为什么浏览器允许onmousedown JS改变href?

    我很长时间以来都注意到 当您尝试复制链接位置或在 Facebook 上打开链接时 它会修改链接并将其传递给l php 例如 我可以被发送到 http www facebook com l php u http 3A 2F 2Fwww goo
  • 无法从 JQuery ajax 调用接收 JSON

    我已经确定来自服务器的 JSON 是有效的 手动进行 ajax 调用 但我真的很想使用 JQuery 我还使用 firebug 确定发送到服务器的 post URL 是正确的 但是 错误回调仍然被触发 解析错误 我还尝试了数据类型 文本 我
  • JS:修改 JS 对象中的值/对

    我正在尝试找出修改对象的最佳方法 而无需三次写出类似的对象 所以我有这三个对象 var object1 start start end end type 1 var object2 start start end end type 2 va
  • 当 Chrome 中嵌套滚动中的数据更改时防止页面滚动

    我在页面中有一个固定大小的元素 带有 溢出 滚动 其内容经常更改 我预计该元素内部发生的更改会影响该元素的滚动 但不会影响页面滚动 但是当这个元素位于页面顶部时 页面本身开始滚动 我怎样才能防止这种情况发生 要重现此行为 我在 chrome
  • 为什么 console.log() polyfill 不使用 Function.apply()?

    我一直在看一些流行的console log 包装 填充 保罗 爱尔兰的 http paulirish com 2009 log a lightweight wrapper for consolelog 本阿尔曼的 http benalman
  • 从浏览器访问本地文件?

    您好 我想从浏览器访问系统的本地文件 由于涉及大量安全检查 是否可以通过某种方式实现这一目标 或使用 ActiveX 或 Java Applet 的任何其他工作环境 请帮帮我 要通过浏览器访问本地文件 您可以使用签名的 Java Apple
  • 基本 jQuery 动画:省略号(三个点依次出现)

    我需要的 我需要一个动画省略号 一个点一个接一个地出现 动画需要循环播放 我想通过 jQuery 实现这一点 动画序列 Frame 1 等待您的选择 Frame 2 等待您的选择 Frame 3 等待您的选择 Frame 4 等待您的选择
  • JavaScript setTimeout 和更改系统时间会导致问题

    我注意到如果我设置setTimeout未来1分钟 然后将我的系统时间更改为过去5分钟 setTimeout功能将在 6 分钟后触发 我这样做是因为我想看看夏令时系统时钟更改期间会发生什么 我的 JavaScript 网页使用setTimeo
  • 获取类中的所有静态 getter

    假设我有这个类 我像枚举一样使用它 class Color static get Red return 0 static get Black return 1 有没有类似的东西Object keys to get Red Black 我使用
  • 测试 jQueryUI 是否已加载

    我正在尝试调试网站 并且我认为 jQueryUI 可能未正确加载 如何测试 jQueryUI 是否已加载 if jQuery ui UI loaded OR if typeof jQuery ui undefined UI loaded 应
  • 如何得知客户端从服务器的下载速度?

    根据客户的下载速度 我想以低质量或高质量显示视频 任何 Javascript 或 C 解决方案都是可以接受的 Thanks 没有任何办法可以确定 您只能测量向客户端发送数据的速度 如果没有来自客户端的任何类型的输入来表明其获取信息的速度 您
  • 突出显示单词并提取其附近文本的函数

    我有一个文本例如 Etiam porta semmalesuada magna mollis euismod 整数取数 ante venenatis dapibus posuere velit aliquet 埃蒂亚姆 门塔 塞姆 male

随机推荐

  • 仅打印那些总和为 10 的 3 位数组 - C 程序

    Output 1 2 3 4 1 2 7 1 3 6 1 4 5 1 9 2 3 5 2 8 3 7 4 6 10 预期输出 1 2 7 1 3 6 1 4 5 2 3 5 我只想要那些总和为 10 并且只有 3 位数字的数字对 即总和为
  • Markdown 内部链接在 BitBucket README.md 中不起作用

    我在 BitBucket 项目中有一个 README md 文件 内容类似于 Table of Contents Document Organization document organization Document Organizati
  • 导入模块的标准方式

    我目前正在尝试在代码中使用 c 模块 该代码应该在 Windows MSVC 和 Linux Clang 和 或 GCC 上编译 我目前正在 Visual Studio 中进行开发 并使用 标准一致性模式 permissive 使我的代码尽
  • 将 VlcManager 与最新版本的 Vlc.DotNet 结合使用

    我正在尝试将 Vlc DotNet 库用于我的 WinForms C 应用程序 我不想使用 Vlc DotNet 库的 Core Interops 中的 VlcManager 但没有最新的文档 在早期版本中 您可以创建 VlcControl
  • CocoaPods podspec lint 失败 - 找不到文件

    我正在尝试分发我的 Pod 但我在验证时遇到问题 当我尝试检查我的 podspec 时 我得到 ERROR iOS xcodebuild path to my source file m 14 9 fatal error KeyValueO
  • Python VS代码无法与IPython内核连接

    我创建了一个新的虚拟环境并尝试连接 VS 代码 当我在 VS code 中打开包含文件和虚拟环境的文件夹时 在左下角我可以看到选择的 python 解释器 如下图所示 但是 当我运行该程序时 它显示正在连接到 IPython Kernel
  • 从 Java 中的基类访问子类字段

    我有一个名为的基类Geometry其中存在一个子类Sphere public class Geometry String shape name String material public Geometry System out print
  • setTimeout返回什么?

    我很好奇 setTimeout 返回什么 所以我做了一个快速测试 var thing setTimeout function 1 让我惊讶的是它给了我一个数字 1351每次都是不同的 那么它返回的真的只是一个数字吗 那么我实际上也可以这样做
  • 交叉过滤查询

    是否可以过滤以数组作为值的交叉过滤数据集 例如 假设我有以下数据集 var data bookname the joy of clojure authors Michael Fogus Chris Houser tags clojure l
  • 如果定义了属性,则从 Waterline 中的模型中获取结果

    我有一个模型 其中不需要每个属性 我想查询模型并返回属性所在的所有实例is定义的 这就是我的think代码应该看起来像这样 但它不起作用 有什么想法或一些详细文档的链接吗 MyModel find where propertyThatMay
  • iOS SDK:切换相机时如何导致视图翻转

    在 iOS Objective C 上相当新 我正在对 Apple 进行修改AVCam http bit ly IFQn3h 视频采集 示例代码 想在前后摄像头切换时模仿原生摄像头的翻转动画 看起来这似乎很容易 但我无法掌握它是如何完成的
  • extjs解析模板中嵌套的json

    尝试 未成功 显示嵌套 json 中的数据 JSON 可能看起来像 contacts id 1 client id 135468714603 addresses id 1 contact id 1 address id 16 address
  • R中magrittr和arima的兼容性问题

    考虑以下示例 library tidyverse set seed 1 forecast forecast x lt cumsum rnorm 10 y1 lt arima x order c 1 0 0 y2 lt x gt arima
  • 保存模型会破坏一对多关系

    当我保存一个父对象 其中有许多子对象 时 这种关系似乎被破坏了 这Ember 文档 http emberjs com guides models persisting records 在这个问题上保持沉默 我需要做什么才能使父对象仍然显示子
  • JavaScript 中 += 和 =+ 的区别

    我想知道为什么运行第三行代码后的结果是a is 5 a 10 b 5 a b 尴尬的格式 a b 相当于 a b And b只是一种奇特的铸造方式b编号 如下所示 var str 123 var num str 您可能想要 a b 相当于
  • Nginx server_name regexp 不能作为变量使用

    有人告诉我为什么我仍然遇到这样的错误吗 Restarting nginx emerg unknown domain name variable configuration file etc nginx nginx conf test fai
  • Dapper MultiMap 不适用于具有 NULL 值的 splitOn

    我在尝试在包含以下内容的列上进行拆分时 在 dapper 中遇到了 MultiMaps 的问题NULL Dapper 似乎没有实例化对象 我的映射函数接收到null而不是对象 这是我的新测试 class Product public int
  • 响应宽度 Facebook 页面插件

    Facebook 推出了新的页面插件来取代 Like 框插件 文档 https developers facebook com docs plugins page plugin https developers facebook com d
  • 在 Highcharts 股票图表上将最后一点的值显示为标签或工具提示

    我在一张股票图表 HighCharts 中有多个不同比例的数据系列 我想将每个系列连接到它的轴或显示每个系列的最后一个点的值 类似于数据标签 但仅适用于每个系列的最后一个点 function container highcharts cha
  • 如何在 contenteditable div 中输入时创建一个段落?

    我正在为我的一个项目制作一个简单的编辑器 我需要使用可编辑的 div 使用contenteditable财产 我需要两个功能 输入两次后自动插入小时 创建一个段落而不是 br 进入并专注于它 所以我写了这个 带着一些灵感 这是负责的代码的一