2012-09-18 54 views
0

我在我的頁面上有多個div。我想將選定的文本從div1複製到div2。div2,div3,div4上的選擇不應該被複制。如果按Ctrl + A或一次選擇多個div,則不應該複製。防止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 
} 
} 
+2

先試試看,如果你卡住了,這裏。 – billyonecan

+0

我做到了。我能夠限制只從div2複製,但無法處理ctr +場景,並且如果我通過拖動鼠標選擇所有div,則將分離我的div的滾動也會被複制。 – user1551056

+2

在您的問題中發佈您遇到問題的代碼 – billyonecan

回答

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); 
} 
+0

謝謝,它爲我工作:) – user1551056

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]

+0

我不想停止任何地方的文本選擇 – user1551056

+0

@ user1551056,如果用戶在屏幕上加載了文本,他們可以以任何方式複製它們。你無法阻止這一點。你可以稍微減慢它們,但不能__停止它們。 – Starx

+0

有沒有辦法只能從一個特定的div輸入選定的文本? ( – user1551056

0

你可以提供自己的鍵盤監聽,試圖阻止複製/粘貼快捷鍵,並阻斷右mousebutton,以防止用戶使用興田上下文菜單 - 但這會從UE的角度來看令人討厭。

我沒有在我面前檢查代碼,但是iirc可以在Div2上監聽'onchange'(或類似)事件,並且每次啓動時檢查內容(並檢查它們是否匹配內容來自Div1)。使用隱藏元素作爲歷史記錄緩衝區將允許您回滾任何不屬於Div1的內容(以及識別新內容)

+0

我的場景是:1.我選擇div 2上的文本 2.我點擊「包括「按鈕,這將捕獲我選中的文本(在var中選擇(說)) 3.選中獲取附加到div1。我的問題是我不應該獲取文本在」選定「,這是外div2 – user1551056