如何选择(突出显示)和复制有序列表编号

时间:2016-10-04 14:46:28

标签: javascript jquery html html-lists highlight

我需要在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/

1 个答案:

答案 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="#"