2011-04-17 37 views
2

我正在尋找一種方法來禁用在使用Ctrl + C等時複製特定區域的文本。是否必須編寫文字以不同的方式。JS/CSS/XHTML:不要在複製事件期間複製特定文本

http://gyazo.com/721a0a5b5af173beb1ad3305633beafb.png

上面是什麼這是。這是我一直在研究的語法高亮顯示器(到目前爲止支持3種語言)。當用戶以任何方式選擇任何文本時,我不希望行號被複制。

我想不出一種方法來顯示行號,沒有他們真正在那裏。

回答

2

只要行號和源代碼混合在一起,即使不是不可能的話,編程上也很難防止。

理想的方法是將源代碼放在它自己的實際容器中。

打開一個文檔檢查器,並期待在Github上如何做到這一點,例如:https://github.com/jbrisbin/riak-exchange/blob/master/Makefile

它們具有包含行號的單獨<pre>元件,以及含有該代碼<table>細胞。 (我想選擇一個原因是他們在這裏使用表,但我不知道肯定)

+0

謝謝Pekka。我花了最後一小時改變它的工作類似於你給我的例子,它給了我想要的結果。 :) – 2011-04-17 21:38:13

1

設置user-select,-moz-user-select-webkit-user-selectnone可能工作。對於IE,您需要處理onselectstart並返回false。

這會阻止人們選擇文本,但我不知道當您嘗試複製其他文本時會發生什麼情況。

+0

我已經加入了'*用戶選擇:無;'在CSS選擇,還有'焦點的時候=「返回false ;「'爲IE。當您嘗試選擇文本時,這會正確地禁用文本選擇,但是當您從其他位置(我的困境)開始選擇時,將無法正確禁用文本選擇。 – 2011-04-17 20:27:50

+0

是的,這是我所期望的。儘管它至少在谷歌瀏覽器中正常工作。 – Ryan 2011-04-17 20:30:21

2

這給一個嘗試...

演示:http://jsfiddle.net/wdm954/UD8Dq/7

我分層的DIV所以代碼div在上面,數字在後面。當你複製和粘貼你應該只是得到的代碼。

.lines { 
    position: absolute; 
    width: 80%; 
    color: #666; 
} 
.lines pre:nth-child(odd) { 
    background-color: #EEE; 
} 
.code { 
    position: absolute; 
    z-index: 2; 
    padding-left: 5%; 
    width: 80%; 
} 


<div class="box"> 
    <div class="lines"> 
     <pre>1</pre> 
     <pre>2</pre> 
     <pre>3</pre> 
     <pre>4</pre> 
    </div> 
    <div class="code"> 
<pre> 
    code 
    code 
    code 
    code 
</pre> 
    </div> 
</div> 
1

我知道這個問題已經三年了,但是使用HTML5,您可以將行號存儲在數據屬性中,並使用CSS2來顯示文本。這應該防止行號被複制。

HTML

<span data-line-number='1' class='line'></span> 

CSS

.line:before { 
    content: attr(data-line-number); 
} 
+0

+1這是現在最簡單的方法來實現我的原始問題,但我會保持原來接受的答案。 – 2014-08-09 03:33:06