我需要在html页面中处理所选的(用鼠标突出显示)文本。但如果我选择有序列表< ol>< / ol>我丢失了编号信息。也许有人可以帮我解决这个问题,因为如果我选择并复制+粘贴选择到文本编辑器 - 我会看到这些数字。用于html片段选择的函数:
function getSelectionHtml() {
var html = "";
if (typeof window.getSelection != "undefined") {
var sel = window.getSelection();
if (sel.rangeCount) {
var container = document.createElement("div");
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
container.appendChild(sel.getRangeAt(i).cloneContents());
}
html = container.innerHTML;
}
}
else if (typeof document.selection != "undefined") {
if (document.selection.type == "Text") {
html = document.selection.createRange().htmlText;
}
}
return html;
}
完整的小提琴示例:https://jsfiddle.net/t2mhcbyo/3/
答案 0 :(得分:1)
更新了小提琴here。 实际上,主要的问题是你实际上并没有选择这些数字。他们无法选择。 (你注意到它们没有突出显示)。
我怀疑当你将列表复制成一个&#39;文本&#39;编辑器,你实际上是复制html(这是一个有数字的有序列表),编辑器显示为有序列表。当您复制到纯文本编辑器(如记事本,wordpad)或只删除格式时,它将返回到突出显示的测试。
要获取列表项开头的数字,您可以直接将信息存储在<li>
标记中。
<li index="3">
然后,当您选择突出显示的html时,您可以使用正则表达式字符串替换将索引更改为数字。
示例正则表达式:
html = html.replace(/<li\ index="([0-9]+)">/g, "<li>$1. ");
<li index="3">
变为<li>3.
这将替换包含索引信息的开始列表项标记,其中标记没有信息,但在列表的开头有一个数字。
问题:此方法在每个行的开头放置一个数字,无论实际突出显示多少行。您可以将正则表达式修改为仅替换部分index="#"
。