window.getSelection include HTML tag



说HTML页面包含此行

head<div class='myClass'>select me</div>tail

它在页面上显示为 headselect metail,

var sel = window.getSelection ? window.getSelection() : document.selection.createRange();
var html = "";
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;
}
console.log(html);

当用户选择"选择我"时, 以下代码返回

select me

当用户选择"Dselect met"时, 然后代码返回

d<div class='myClass">select me</div>t

如何通过选择"选择我"返回<div class='myClass">select me</div>

同时不影响原始文本选择,如选择"再次选择">

<p>this select again with no HTML tag</p>

对于IE来说document.selection.createRange()呢?

欢迎!你正在尝试做的事情是可能的,但可能并不总是按照你想要的方式行事。我附上了一个示例,但基本上您想查看选择的第一个和最后一个节点。如果它们相同(即您的选择都在同一节点中(,则可以查看您选择的内容是否与该节点的完整内容相同。

不过,您将对标记结构做出很多假设。老实说,我想不出这个用例。如果您确定自己有一个,那就去做吧,但也要考虑您的其他选择。

window.addEventListener("mouseup", function() {
var sel = window.getSelection ? 
window.getSelection() :   
document.selection.createRange();

var display = document.getElementById('selected-output');  
var output = sel;  
// If the starting node of the selection is the
// same as the ending node of the selection 
// (i.e. the selection doesn't cross nodes)
if (sel.anchorNode && (sel.anchorNode == sel.extentNode)) {
if (sel.toString() == sel.anchorNode.textContent) {
output = sel.anchorNode.parentElement.outerHTML;
}
}

display.innerText = output;
});
body {
background-color: #ffffff;
font-family: sans-serif;
padding: 1em;
}
.select-this {
background-color: #f2f2f2;
padding: 1em;
margin: 1em 0;
}
.explanation {
}
.selected {
background-color: #dddddd;
border-radius: 3px;
border: 1px solid #aaaaaa;
padding: 1em;
}
<div class="select-this">
<div>Here is some text. You can <em>select</em> it if you want.</div>
A div just closed.
<h1>This is an H1 tag.</h1>
<p>This is a P tag.</p>
<p>I'm just giving us some stuff to select. 
<strong>Lorem ipsum,</strong> et cetera.</p>
</div>
<p class="explanation">
If you select something above, it should show up here:</p>
<div class="selected">
<div id="selected-output">
</div>
</div>

最新更新