【发布时间】:2018-04-10 08:45:54
【问题描述】:
下面的代码允许我突出显示文本。有没有办法删除突出显示的文本(即不再突出显示的文本)
- 单击突出显示的文本,然后按“删除”按钮或
- 双击它?
我还希望从元素 highlights 中删除此突出显示的文本。
var lastSelection;
document.addEventListener("selectionchange", function() {
lastSelection = window.getSelection();
});
var highlights = document.createElement("div");
function getRightClick(e) {
var rightclick;
if (!e) var e = window.event;
if (e.which) rightclick = (e.which == 3);
else if (e.button) rightclick = (e.button == 2);
return rightclick; // true or false
}
function getSelectionCharacterOffsetsWithin(btnColor) {
var selectedText = "null";
if (typeof window.getSelection != "undefined") {
var selection = window.getSelection();
selectedText = selection.toString();
var range = selection.getRangeAt(0);
//Strip trailing punctation
selectedText = selectedText.replace(/[\s.,!?:;'"-]+$/, "");
//Leading space / quotes
var offset = 0;
var match = selectedText.match(/^[\s"']+/);
if (match)
offset = match[0].length;
selectedText = selectedText.replace(/^[\s"']+/, "");
if (selectedText === "") {
alert("Error: you must select at least one character");
tartOffset = 0, endOffset = 0, selectedText = "null";
} else {
var newInputid = parseInt(Math.random() * 10000);
//This is code to keep word highlighted after selecting
var newNode = document.createElement("span");
newNode.classList.add('chosen');
var previd = ("i" + newInputid);
newNode.classList.add(previd);
newNode.appendChild(range.extractContents());
range.insertNode(newNode);
var textSegment = $("." + previd);
textSegment[0].style.backgroundColor = btnColor;
}
}
return {
text: selectedText,
cid: previd
};
}
$('.article').mousedown(function(event) {
$('body').attr('mouse-top', event.clientY + window.pageYOffset);
$('body').attr('mouse-left', event.clientX);
if (!getRightClick(event)) {
$('.entity_types').hide();
document.getSelection().removeAllRanges();
}
});
$('.article').mouseup(function(event) {
if (lastSelection.toString().length > 1 && !getRightClick(event)) {
$('.entity_types').css({
display: 'block',
position: 'absolute',
top: event.clientY + 15,
left: event.clientX + 10
});
$('.entity_types button').on('click', function(e) {
e.preventDefault();
var btnColor = $(this)[0].style.color;
var selOffsets = getSelectionCharacterOffsetsWithin(btnColor);
var selectedText = selOffsets.text;
var selectedID = selOffsets.cid
var txt = document.createTextNode(selectedText);
highlights.appendChild(txt);
});
}
});
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id='entity_class' class="entity_types">
<button class="btn" style="color:green">Class 1</button>
<button class="btn" style="color:red">Class 2</button>
<button class="btn" style="color:purple">Class 3</button>
</div>
<div class="article" style="overflow-x:auto;">
What is missing from this statement, and likely to be asked by lawmakers, is why it took a newspaper to discover this breach of Facebook's systems. And, once Facebook knew, why it didn't notify the public and regulators immediately - instead of doing
everything it could to block the story.
</div>
【问题讨论】:
-
请在minimal reproducible example中包含此代码所作用的HTML。
-
我也为你转换成sn-p,只保留对jQuery的引用并添加你的HTML。
-
当您创建突出显示的跨度时,您不能绑定到它的点击事件吗?
标签: javascript jquery