var selectionElements = document.querySelectorAll('.selection');
selectionElements.forEach(function(element){
element.setAttribute('original-content', element.innerHTML); // this will be needed to reset to original after a selection has been made
element.addEventListener('mouseup', function() {
replaceContentWithSelectionWrapper(this)
});
});
function replaceContentWithSelectionWrapper(element) {
let selection = window.getSelection().toString();
if(selection.length <= 0) { // if selection length is not bigger then 0 we can stop right here
return;
}
// next lines should be self explanatory
// get start of string until selection
// get the end of string after selection
// concatenate all strings back together
let selObj = window.getSelection();
let selRange = selObj.getRangeAt(0);
let originalString = element.innerHTML;
let start = originalString.substr(0, selRange.startOffset);
let end = originalString.substr(selRange.endOffset);
element.innerHTML = start + '<span class="mark-special-selected">' + selection + '</span>' + end;
document.body.classList.add('selections-enabled');
}
function clearSelections() {
var selections = document.querySelectorAll('[original-content]');
selections.forEach(function(selection){
selection.innerHTML = selection.getAttribute('original-content');
});
}
document.body.addEventListener('mousedown', function(){
if(document.body.classList.contains('selections-enabled')) {
document.body.classList.remove('selections-enabled');
clearSelections();
}
});
.selection {
font-size : 18px;
}
.mark-special-selected,
.selection::selection{
background : rgba(173, 216, 130, 0.9);
border : 1px solid transparent;
border-radius : 15px;
outline: 2px;
}
<h1 class="selection">Here is some text, you can select some of it with your mouse</h1>
<p class="selection">Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet. Lorem ipsum dolor sit amet, consetetur sadipscing elitr, sed diam nonumy eirmod tempor invidunt ut labore et dolore magna aliquyam erat, sed diam voluptua. At vero eos et accusam et justo duo dolores et ea rebum. Stet clita kasd gubergren, no sea takimata sanctus est Lorem ipsum dolor sit amet.</p>