0

我的页面上有多个 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
 }
}
4

3 回答 3

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;
}

[资源]

于 2012-09-18T12:56:36.897 回答
0

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

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

于 2012-09-18T13:10:51.133 回答
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);
}
于 2012-09-18T13:22:23.820 回答