Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/450.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/jsp/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 序列化html:在选定文本周围放置跨元素,同时保留html结构_Javascript_Html_Dom_Serialization_Selection - Fatal编程技术网

Javascript 序列化html:在选定文本周围放置跨元素,同时保留html结构

Javascript 序列化html:在选定文本周围放置跨元素,同时保留html结构,javascript,html,dom,serialization,selection,Javascript,Html,Dom,Serialization,Selection,我正在尝试制作一个文本高亮器,教师可以选择一系列文本,以便学生可以跟随。文本采用HTML格式,因此有等。。。元素 为了突出显示文本范围,我将该范围包装在跨度元素中 问题是: 下面是一个带有一些HTML标记的句子: <p>The <b>quick</b> brown fox jumps over the <em>lazy</em> dog</p> 当我选择“The”这样的词时,它会被包装成一个“boom”,没问题 当我尝试选

我正在尝试制作一个文本高亮器,教师可以选择一系列文本,以便学生可以跟随。文本采用HTML格式,因此有等。。。元素

为了突出显示文本范围,我将该范围包装在跨度元素中

问题是:

下面是一个带有一些HTML标记的句子:

<p>The <b>quick</b> brown fox jumps over the <em>lazy</em> dog</p>
当我选择“The”这样的词时,它会被包装成一个“boom”,没问题

当我尝试选择任何html标记时,问题就会出现。。。例如,如果我选择了整个句子,那么我就失去了所有的分数

我在找什么

一种序列化跨距的方法,使跨距位于html元素之间并包装所有文本

使用上一个示例:如果我选择上面的整个句子,那么我将获得以下输出:

<p><span>The </span><b><span>quick</span></b><span> brown fox jumps over the </span><em><span>lazy</span></em><span> dog</span></p>
问:


有这种序列化的方法吗?我在jQuery文档中找不到任何东西,我问过的几个人都被难住了。

我认为你不需要jQuery,简单的CSS可以做到这一点:

*::selection { background-color: yellow !important; }
关键是使用。文档说明了满足您需求的最重要部分:

将克隆部分选定的节点以包括父标记 使文档片段有效所必需的

document.getElementById'test'.addEventListener'mouseup',函数{ 变量范围=window.getSelection.getRangeAt0, span=document.createElement'span'; span.className='highlight'; span.appendChildrange.extractContents; range.insertNodespan; }; .突出显示{背景色:黄色;} 选择此句子的任何部分,然后将鼠标移动到新位置。
嗨,谢谢你的回答,我很感激,但这不是我要问的。Yrw,我想这是让我困惑的原因:我正在尝试制作一个文本高亮,老师可以选择一系列文本,这样学生就可以跟上。不用担心!感谢你的意图!只是,哇。这正是我一直在寻找的魔法!唯一的问题是像h1到p一样拖拉高光。。。哎呀!我得考虑一下那件事。。这项业务似乎有点像“追逐你的尾巴”。再次感谢!