<!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width, initial-scale=1.0" /> <meta charset="utf-8" /> <title>NetnrRun</title> </head> <body> <p>对选中内容 复制 、 高亮</p> <p>该示例只是简单的演示,只支持单节点选中,如果跨节点选择需要更复杂的逻辑处理</p> <p>控制已经输出选中内容,复制到剪贴板的功能就相对简单了,可以调用一些插件来实现复制内容</p> <p>还有一些 BUG ,选中高亮和不高亮的内容会出问题,因为高亮和不高亮跨节点了</p> <p>2020-01-15 调整选中高亮为添加样式实现,可跨节点选中,也能正常得到选中的内容</p> </body> </html>
p{ float: left; margin: 1rem; padding: 1rem; border: 1px solid green; } /*选中高亮*/ p::selection{ color:white; font-weight: 600; background-color:orange; }
document.onmouseup = function () { var gs = document.getSelection(); var txt = gs.toString(); console.log(txt); if (txt != "" && gs.anchorNode == gs.focusNode) { var elem = gs.anchorNode.parentNode; var nitxt = elem.innerText, newtxt; if (nitxt.indexOf(txt) == nitxt.lastIndexOf(txt)) { // newtxt = nitxt.replace(txt, '<b style="background-color:orange;color:white">' + txt + '</b>'); } else { var nis = Math.min(gs.baseOffset, gs.focusOffset); var nie = Math.max(gs.baseOffset, gs.focusOffset); // newtxt = nitxt.substr(0, nis) + '<b style="background-color:orange;color:white">' + nitxt.substring(nis, nie) + '</b>' + nitxt.substr(nie); } // elem.innerHTML = newtxt; } }