I can used window.getSelection to get selected words.
<div id="content">
<p >If you don't know, you can <a href="https://google.com">google</a></p>
</div>
<script>
let selectionObj = null;
let selectedText = "";
function getCurrentSelect() {
if (window.getSelection) {
selectionObj = window.getSelection();
selectedText = selectionObj.toString();
return {
selectText: selectedText
}
}
}
window.onload = function (){
document.body.addEventListener('mouseup', function(){
// if (selectOb) console.log(getCurrentSelect()===selectOb);
// selectOb = getCurrentSelect();
console.log('onmouseup');
console.log(getCurrentSelect());
})
}
</script>
if have two or more identical elements.
<div id="content">
<p >If you don't know, you can <a href="https://google.com">google</a></p>
<p >If you don't know, you can <a href="https://google.com">google</a></p>
<p >If you don't know, you can <a href="https://google.com">google</a></p>
</div>
how to know which element selected?
I want to be able to return an element object when selecting text.But I don't know what to do.
CodePudding user response:
window.getSelection() will return a selection object which contains some of the properties that you might be interested in. For example, you can access the parent element of the text you select via window.getSelection().baseNode.parentElement. This will return a parent element which you could manipulate with your code furthermore.
In the code below, I will get the parent node of the selected text, and change the color of it (style property) to red. Please find it here:
let selectionObj = null;
let selectedText = '';
function getCurrentSelect() {
if (window.getSelection) {
selectionObj = window.getSelection();
selectedText = selectionObj.toString();
return {
selectText: selectedText,
parentElement: selectionObj.baseNode.parentElement,
};
}
}
window.onload = function () {
document.body.addEventListener('mouseup', function () {
console.log('onmouseup');
const { parentElement } = getCurrentSelect(); // this one will give the parent element of the selected text
parentElement.style.color = 'red'; // we change one of the properties of the parent element
console.log(getCurrentSelect());
});
};
CodePudding user response:
let selectionObj = null;
let selectedText = "";
window.onload = function (){
document.body.addEventListener('mouseup', function(e){
// if (selectOb) console.log(getCurrentSelect()===selectOb);
// selectOb = getCurrentSelect();
console.log('onmouseup');
console.log(e.target.innerText);
})
}
<div id="content">
<p >If you don't know, you can <a href="https://google.com">google</a></p>
</div>
