Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/css/32.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 拖动父对象,但选择子对象上的文本?_Javascript_Css_Html_Draggable - Fatal编程技术网

Javascript 拖动父对象,但选择子对象上的文本?

Javascript 拖动父对象,但选择子对象上的文本?,javascript,css,html,draggable,Javascript,Css,Html,Draggable,我希望父div可以拖动,但子范围中的文本可以选择: <aside draggable="true" id="dragme"> This is an aside, drag me. <span id="copyme" draggable="false">But copy me!</span> </aside> 这里有一把小提琴: 今天有人能找到解决办法吗 更新:可能有解决方案,请查看更新的fiddle: 它的行为有点奇怪,但它能工作。有谁能

我希望父div可以拖动,但子范围中的文本可以选择:

<aside draggable="true" id="dragme">
    This is an aside, drag me. <span id="copyme" draggable="false">But copy me!</span>
</aside>
这里有一把小提琴:

今天有人能找到解决办法吗

更新:可能有解决方案,请查看更新的fiddle:


它的行为有点奇怪,但它能工作。有谁能从这把新小提琴中找到更好的解决方案吗?

您可以向“copyme”元素添加事件侦听器,如下所示:

cm.addEventListener("mouseover", function() {
    dm.setAttribute("draggable", "false");
});
cm.addEventListener("mouseout", function() {
    var selObj = window.getSelection();
    if (selObj) {
        var selRange = selObj.getRangeAt(0);
        var ancestor = selRange.commonAncestorContainer;
        if (ancestor.parentNode === cm) {
            selObj.removeAllRanges();
        }
    }
    dm.setAttribute("draggable", "true");
});
有关完整解决方案,请参见此处的提琴:

我认为这(原则上)是目前你能做的最好的了

cm.addEventListener("mouseover", function() {
    dm.setAttribute("draggable", "false");
});
cm.addEventListener("mouseout", function() {
    var selObj = window.getSelection();
    if (selObj) {
        var selRange = selObj.getRangeAt(0);
        var ancestor = selRange.commonAncestorContainer;
        if (ancestor.parentNode === cm) {
            selObj.removeAllRanges();
        }
    }
    dm.setAttribute("draggable", "true");
});