JavaScript - 双击选择“前代码块”内的所有文本

2024-01-04

我的博客上有一些代码块;我希望当有人双击代码块时,需要选择该代码块的所有代码。

请看下面的代码(这是我到目前为止所得到的,尽管它使用的是jQuery). Now 是否可以使用本机 JavaScript(无需 jQuery) ?

抱歉,如果我问了一个愚蠢的问题,那么我对这些事情还很陌生。 :)

<script type="text/javascript" src="https://code.jquery.com/jquery-1.12.0.min.js"></script>
<style>
pre.highlight {
    border: 1px solid #ccc;
    padding: 10px;
}
</style>
<script type="text/javascript">
$(document).ready(function() {
    // select all code on doubleclick
    $('pre.highlight').dblclick(function() {
        $(this).select();

        var text = this,
            range, selection;

        if (document.body.createTextRange) {
            range = document.body.createTextRange();
            range.moveToElementText(text);
            range.select();
        } else if (window.getSelection) {
            selection = window.getSelection();
            range = document.createRange();
            range.selectNodeContents(text);
            selection.removeAllRanges();
            selection.addRange(range);
        }
    });
});
</script>
<pre class="highlight"><code>.button-css {
    cursor: pointer;
    border: none;
    background: #F2861D;
    padding: 3px 8px;
    margin: 7px 0 0;
    color: #f4f4f4;
}</code></pre>
<pre class="highlight"><code> #slider {
     border-color: #c0c0c0;
     border-radius: 5px 5px 5px 5px;
     border-style: solid;
 }</code></pre>

你的代码工作正常Jquery.
要获取“本机 javascript”版本,请执行以下步骤:

  • 替换 jquery 的$(document).ready具有本机的处理程序window.onload
  • 使用事件目标e.target而不是 jquery 的this
  • 而不是为每个元素添加事件处理程序class="highlight"使用先进的技术添加事件 监听父元素一次并考虑只需要pre or code元素(与class="highlight")

    window.onload = function(){
    
        document.body.addEventListener('dblclick', function(e){
           var target = e.target || e.srcElement;        
           if (target.className.indexOf("highlight") !== -1 || target.parentNode.className.indexOf("highlight") !== -1){
                var range, selection;
    
                if (document.body.createTextRange) {
                    range = document.body.createTextRange();
                    range.moveToElementText(target);
                    range.select();
                } else if (window.getSelection) {
                    selection = window.getSelection();
                    range = document.createRange();
                    range.selectNodeContents(target);
                    selection.removeAllRanges();
                    selection.addRange(range);
                }
                e.stopPropagation();
           }              
    
        });
    };
    

https://jsfiddle.net/8nba46x8/ https://jsfiddle.net/8nba46x8/

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

JavaScript - 双击选择“前代码块”内的所有文本 的相关文章

随机推荐

  • 这两种算法的结果有区别吗?

    这两种算法用于检查有效的会员号码 第一个是公司给我的 第二个是我设计的 从我的测试中我看不出它们在功能上有任何区别 有没有任何情况下任何人都可以看到他们会返回不同的输出 test input 6014355021355010 or 6014
  • 使用适用于 Amazon S3 存储桶的 Java SDK 下载大量文件

    我有大量文件需要从 S3 存储桶下载 我的问题类似于本文 https stackoverflow com questions 1051275 downloading a large number of files from s3除非我想用
  • UIWebView背景颜色

    我正在将 HTML 字符串加载到 UIWebView 中 以便能够查看富文本 到目前为止 一切都很好 但我有一个小问题 在我的 Nib 文件中 我将背景属性设置为绿色 然而 当它显示时 背景是白色的 然后 在类文件中 我添加了以下内容 my
  • Django 外键查询最佳实践

    模型 py class Category models Model name models CharField max length 50 class SubCatergory models Model parent category mo
  • Plotly:并排图之间的 shareX

    我想要两个并排的图共享相同的 X 轴和相同的工具栏 这意味着 通过放大第一个图 第二个图应自动调整大小到相同的缩放区域 一种方法是将图堆叠在另一个之上 使用shareX TRUE 但我需要他们并排 在 python 中似乎有一种方法可以做到
  • 便宜又令人愉快的 rand() 替换

    在对大型游戏程序进行分析后 我发现库函数 rand 消耗了总处理时间的相当一部分 我对随机数生成器的要求不是很繁重 它是否通过大量纯随机性统计测试并不重要 我只是想要一些便宜又令人愉快而且速度非常快的东西 有什么建议么 很少有常用的算法比L
  • 如何使用 useContext 更改 Context 的值?

    使用useContextReact 16 8 的 hook 效果很好 您可以创建组件 使用挂钩并利用上下文值 不会出现任何问题 我不确定如何将更改应用于上下文提供程序值 1 useContext 钩子严格来说是消费上下文值的一种手段吗 2
  • 从 Windows 服务通过调制解调器播放语音

    我正在开发一个 VB NET Windows 服务 该服务持续检查 BMS 数据库是否有新警报 并拨打电话远程警告操作员 我目前正在使用 NET TAPI 包装器和 SAPI 5 3 互操作程序集 我通过电话交谈的步骤是 初始化TAPI接口
  • 如何从主机到 mysql docker 容器执行 mysqldump 命令

    我想为在 docker 容器中运行的数据库创建 mysql 转储 但是 我不想进入容器并执行命令 而是从主机执行此操作 有没有办法做到 我尝试了一些东西 但可能我的命令是错误的 docker exec d mysql sh mysqldum
  • 如何修复 checkmarx 信任边界违规

    我保留用户输入请求中的值 查克马克思抱怨有违反信任边界 从元素请求获取用户输入 该元素的值在没有经过适当清理或验证的情况下流经代码 并最终存储在服务器端 Session 对象中 我还发现这个帖子 https stackoverflow co
  • Java 基本数据类型修饰符是什么?

    好吧 我已经用 Java 编程三年了 现在 我认为自己非常有经验 然而 在查看 Java SE 源代码时 我遇到了一些意想不到的事情 in class Double public static final double MIN NORMAL
  • MPI 中的幽灵细胞交换模式

    我正在使用 MPI 实现分布式图像 灰度 卷积 我现有的模式是在根进程中将图像读取为一维扁平数组 然后将它们分散到所有进程 行分解 然后执行MPI Gather在根进程中 然后再次将图像作为一维展平数组写出 显然 这不会给出预期的结果 因为
  • Arduino 无法被识别

    我不确定这是问问题的正确地方 但我在 stackoverflow 上看到过其他 Arduino 线程 所以我认为没问题 我的 arduino uno 兼容板未被识别 我在 Windows 8 和 Windows XP 上尝试过 当我打开设备
  • 以编程方式设置并保存与导入资源关联的图标

    我有一些自动生成的数据被导出到我的 Unity 项目中 为了帮助我 我想为这些资产分配一个自定义图标以清楚地识别它们 这当然可以通过编辑器本身实现 但理想情况下我希望在导入时自动发生 为此 我编写了一个 AssetPostProcessor
  • 有 WEBGL 手册吗? [关闭]

    Closed 此问题正在寻求书籍 工具 软件库等的推荐 不满足堆栈溢出指南 help closed questions 目前不接受答案 是否有某种 WebGL 手册列出了所有功能等 我尝试谷歌但一无所获 这两个资源对我帮助很大 Mozill
  • jquery 选择器不适用于使用 Cassette 的脚本标记内的元素

    当尝试使用访问数据加载时 index data onload 我回来了 undefined 如果没有周围的脚本标签 一切都会正常工作 这是使用加载的Cassette http getcassette net 它将它包装在脚本标签内 我究竟做
  • 从 Keras model.evaluate 和 model.predict 获得不同的结果

    我已经使用 word2vec 训练了一个模型来预测主题类别 并使用 keras 训练了一个 lstm 模型 并且在训练过程中获得了大约 98 的准确率 我保存了模型 然后将其加载到另一个文件中以尝试测试集 我使用model evaluate
  • 通过 HTTP / mod_svn 访问 SVN 存储库的旧版本

    使用 Apache 的 mod svn 模块 您不仅可以通过 SVN 客户端访问存储库 还可以使用相同的 URL 直接通过 HTTP 访问存储库 在这种情况下 您只会得到一个显示 HEAD 修订版的普通目录列表 如果 SVN 存储库已在 S
  • Spotify Web API 将新的可控设备添加到 Spotify 设备列表

    我尝试设置一个能够通过 Spotify Web API 使用 Spotify 功能的新设备 有一个API调用https developer spotify com web api get a users available devices
  • JavaScript - 双击选择“前代码块”内的所有文本

    我的博客上有一些代码块 我希望当有人双击代码块时 需要选择该代码块的所有代码 请看下面的代码 这是我到目前为止所得到的 尽管它使用的是jQuery Now 是否可以使用本机 JavaScript 无需 jQuery 抱歉 如果我问了一个愚蠢