How to know if selected text is inside a specific div
I have two divs as shown below:
<div id="div1">
<p>something</p>
<div><table><tr><td>Div1</td></tr></table></div>
</div>
<div id="div2">
<p>something else</p>
<div><table><tr><td>Div2</td></tr></table></div>
</div>
<button type="button">Check</button>
Now, I want to know when some text is selected and then the button pressed, if the selected text is under "div1" or not. How can I do that?
Edit: And the solution has to work in IE-7 and above.
Solution 1:
The elementContainsSelection()
function below returns a boolean representing whether the specified element contains the whole of the user's selection and works in all major browsers, including IE 6.
Live demo: http://jsfiddle.net/eT8NQ/
Code:
function isOrContains(node, container) {
while (node) {
if (node === container) {
return true;
}
node = node.parentNode;
}
return false;
}
function elementContainsSelection(el) {
var sel;
if (window.getSelection) {
sel = window.getSelection();
if (sel.rangeCount > 0) {
for (var i = 0; i < sel.rangeCount; ++i) {
if (!isOrContains(sel.getRangeAt(i).commonAncestorContainer, el)) {
return false;
}
}
return true;
}
} else if ( (sel = document.selection) && sel.type != "Control") {
return isOrContains(sel.createRange().parentElement(), el);
}
return false;
}