是否有一种简单的方法可以将跨度环绕在 html 段落中的任意文本上?例如,给定以下原始 html:
<p>Here is a dandy block of text to color up</p>
<p> WHOAH another paragraph</p>
我想根据用户输入包装文本的任意部分。因此,一组输入可能会将其转换为
<p>Here is a <span style="background:yellow">dandy block</span> of text to color up</p>
<p> WHOAH <span style="background:green">another paragraph</span></p>
虽然另一组输入可能会创建
<p>Here is a<span style="background:yellow">a dandy block</span> of text to color up</p>
<p> WHOAH <span style="background:green">another</span> paragraph</p>
这个问题与this和this有关,但是,与我的目标的主要区别是我希望高亮是永久性的,而不仅仅是临时选择,而且我还希望它在 p 元素而不是 textareas 中工作。
如果可能的话,我想它看起来像使用 jQuery
var innerText = $('p')[p_index].slice(char_start, char_end).text();
$('p')[p_index].slice(char_start, char_end).html(
"<span style=\"background:yellow\">"+
innerText +
"</span>");
这将(理论上)选择p_index
段落,获取给定索引之间的范围并将其替换为新创建的跨度,其中嵌套了原始文本。这显然不起作用,因为 jQuery 对象上的下标不会返回另一个内部 jQuery 对象。尽管
$("p").slice(0, 1).html("<span style=\"background: blue\">" +
$("p").slice(0, 1).text() +
"</span>");
完全符合我在段落级别上的要求,但不是在文本级别上。考虑到我拥有的字符范围,我可以使用这种方法通过完全编写每个段落来进行替换,但是如果有简单的方法,我将非常感谢您的建议。