Сделать текст невыбираемым и некопируемым (webkit, окруженный копируемым текстом)

следующий фрагмент показывает, как сделать текст невыбираемым. К сожалению, если вы выбираете текст с обеих сторон в Chrome, при копировании и вставке невыбранный текст также вставляется.

есть ли способ иметь много записей с неизбирательным контентом, который вы можете копировать и вставлять, и ни один из неизбирательного контента не является наклеили?

.hide {
  color: orange;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
<div>Hello this text is selectable <span class="hide">but I'm not</span> You can select me all day!</div>

http://codepen.io/regan-ryan/pen/XdodGx

edit: этот вопрос действительно кажется возможным дубликатом, видя, что есть что-то вроде 12 вопросов уже по этой теме. Однако я не мог найти свою конкретную проблему после обширного поиска, поэтому я подумал, что она заслуживает собственного вопроса с более конкретным названием вопроса.

3 ответов


более обходной путь: вы можете использовать тот факт, что CSS генерируемый контент невидим для буфера обмена ( * ), поэтому с пустым промежутком с текстом, перемещенным в некоторый атрибут, у вас есть визуально аналогичный результат с запрошенным поведением clibpoard:

[data-text] {
  color: orange;
}
[data-text]::after {
  content: attr(data-text);
}
<div>Hello this text is selectable <span data-text="but I'm not"></span> You can select me all day!</div>

http://codepen.io/myf/pen/jqXrNZ

Если доступность / SEO не вызывает беспокойства, это может быть решением. В другом случае это может быть реальный текст в HTML, но перемещен в атрибут со скриптом "по требованию".

(*) обновление: как отмечено в комментарии ( Как отключить выделение текста с помощью CSS? ) Internet explorer фактически включает в себя CSS генерируемый контент в буфере обмена. Аргх.


css может отключить выделение выделения, но если вы хотите использовать не копировать текст, Используйте этот небольшой фрагмент кода jQuery

$('.hide').on('copy paste cut drag drop', function (e) {
   e.preventDefault();
});

$('.hide').on('copy paste cut drag drop', function (e) {
       e.preventDefault();
    });
.hide {
  color: orange;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Hello this text is selectable <span class="hide">but I'm not</span> You can select me all day!</div>

вы можете попробовать прочитать выделенный текст с помощью window.getSelection. Пожалуйста, попробуйте следующий пример кода и посмотрите в консоль. При этом, вы можете удалить ненужный текст из строки и скопировать его в буфер обмена. Но это не так просто, возможно, даже невозможно. Это просто идея.

function getSelectedText() {
  console.log(window.getSelection());
}

document.onmouseup = getSelectedText;
document.onkeyup = getSelectedText;
.hide {
  color: orange;
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
}
<!-- begin snippet: js hide: false -->
<div>Hello this text is selectable <span class="hide" unselectable="on">but I'm not</span> You can select me all day!</div>