如何检测用户选择(用鼠标突出显示)是否属于某个元素的子元素?
示例:
<div id="parent">
sdfsdf
<div id="container">
some
<span>content</span>
</div>
sdfsd
</div>
伪代码:
if window.getSelection().getRangeAt(0) is a child of #container
return true;
else
return false;
答案 0 :(得分:2)
使用jQuery on() event handler
$(function() {
$("#container > * ").on("click",
function(event){
return true;
});
});
修改: http://jsfiddle.net/9DMaG/1/
<div id="parent">outside
<div id="container">
outside
<span>first_span_clickMe</span>
<span>second_span_clickMe</span>
</div>
outside</div>
$(function() {
$("#container > span").on("click", function(){
$('body').append("<br/>child clicked");
});
});
答案 1 :(得分:0)
好的,我设法在一个&#34;脏&#34;办法。代码可以使用改进,但它为我做了工作,我现在懒得改变它。基本上我遍历选择检查的对象,如果在某个时刻它到达具有指定类的元素。
var inArticle = false;
// The class you want to check:
var parentClass = "g-body";
function checkParent(e){
if(e.parentElement && e.parentElement != $('body')){
if ($(e).hasClass(parentClass)) {
inArticle = true;
return true;
}else{
checkParent(e.parentElement);
}
}else{
return false;
}
}
$(document).on('mouseup', function(){
// Check if there is a selection
if(window.getSelection().type != "None"){
// Check if the selection is collapsed
if (!window.getSelection().getRangeAt(0).collapsed) {
inArticle = false;
// Check if selection has parent
if (window.getSelection().getRangeAt(0).commonAncestorContainer.parentElement) {
// Pass the parent for checking
checkParent(window.getSelection().getRangeAt(0).commonAncestorContainer.parentElement);
};
if (inArticle === true) {
// If in element do something
alert("You have selected something in the target element");
}
};
}
});