搜尋

首頁  >  問答  >  主體

javascript - 關於停用文字選擇與複製的問題

樣式如下
.test1 {
  user-select: none;
}
html 結構如下
<body>
<p class="content">
  <p class="test2">111</p>
  <p class="test1">222</p>
  <p class="test2">333</p>
  <p class="test1">444</p>
  <p class="test2">555</p>
</p>
</body>

給其中的某幾項做了禁用本文選擇,單獨對某一項選擇時,確實能夠禁用選擇,其中的內容也無法複製,但是如果用cmd a 進行全選時,會看到被停用的項目在頁面上顯示的是沒有被選擇,但此時內容能被複製下來。

接下來用 js 去控制:
[].forEach.call(document.querySelectorAll('.test1'), (node) => {
  node.addEventListener('copy', (e) => {
    e.stopPropagation();
    e.preventDefault();
    console.log(1);
    return false;
  }, true);
  node.addEventListener('selectstart', (e) => {
    e.stopPropagation();
    e.preventDefault();
    console.log(2);
    return false;
  }, true);
});

發現還是會在單獨選取時生效,但全部選取時就失敗了,所以想問下有什麼辦法能夠在可選取的節點中穿插不可選取的節點,還能使得全選複製時只選取到可選取的內容。

为情所困为情所困2706 天前774

全部回覆(2)我來回復

  • 为情所困

    为情所困2017-06-26 11:00:49

    可以換個思路,例如把文字放到css中。 css中的文字就完全無法選取和複製了。隨手寫了個測試程式碼:

    JsFiddle: https://jsfiddle.net/d95cugaL/

    JsBin: http://jsbin.com/nowoxuceta/e...

    或再進一步,直接把文字放在圖片上...

    回覆
    0
  • 我想大声告诉你

    我想大声告诉你2017-06-26 11:00:49

    這兒有個思路,就是你可以禁止ctrl+c的滑鼠事件。
    //禁止ctrl複製

    document.onkeydown=function(){
        if((event.ctrlKey) && (window.event.keycode==67)){
              event.returnValue=false;
              alert("Ctrl+C被禁止啦!");
        }
    }
    

    如果全選有問題,也可以禁止ctrl+A

    回覆
    0
  • 取消回覆