防止多重选择div

时间:2012-09-18 12:50:43

标签: javascript jquery

我的页面上有多个div。我想将所选文本从div1复制到div2。不应复制div2,div3,div4上的选择。如果按下ctrl + A或一次选择多个div,则不应进行复制。

//Validation for including text only from specified div

$('#DocumentText').mouseup(function (e) {
    debugger;
    isSelected = true;
    flaginclude = 1;

    // e.stopPropagation();
});

$(document).mouseup(function (e) {
    debugger;

    if (flaginclude != 1) {
        e.stopImmediatePropagation();
        isSelected = false;
    }
    flaginclude = 0;
});

myfunction()
{
 if(isSelected)
 {
   //logic to append selected text on div2
 }
}

3 个答案:

答案 0 :(得分:2)

没有可靠的方法来确保这一点。但是,使用no-select在现代浏览器中可以阻止选择。

#div1, #div2 {
    -webkit-touch-callout: none;
    -webkit-user-select: none;
    -khtml-user-select: none;
    -moz-user-select: none;
    -ms-user-select: none;
    user-select: none;
}

[Source]

答案 1 :(得分:0)

您可以提供自己的键盘监听器来尝试阻止复制/粘贴键盘快捷键,并阻止右键按钮以防止用户使用hte上下文菜单 - 但从UE的角度来看,这将是非常讨厌的。

我没有在我面前检查代码,但是你可以在Div2上监听“onchange”(或类似)事件,并且每次触发检查内容(并检查它们是否与内容匹配)来自Div1)。使用隐藏元素作为历史缓冲区将允许您回滚不是来自Div1的任何内容(以及识别新内容)

答案 2 :(得分:0)

您可以将事件后的选择更改为仅限于特定元素。这是一个如何在特定元素中选择文本的示例:

https://stackoverflow.com/a/5801903/96100

这是一个使用我的Rangy库来限制选择的示例函数:

现场演示:http://jsfiddle.net/nm3FM/

代码:

function limitSelectionToElement(el) {
    var selectedRange = null;
    var sel = rangy.getSelection();
    var elRange = rangy.createRange();
    elRange.selectNodeContents(el);
    if (sel.rangeCount) {
        selectedRange = sel.getRangeAt(0).intersection(elRange);
    }
    elRange.detach();
    sel.setSingleRange(selectedRange);
}