Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Unselectable and uncopyable text HTML

This is my attempt below,

/* css */
.unhighlightable-text {
  -webkit-touch-callout: none;
  -webkit-user-select: none;
  -khtml-user-select: none;
  -moz-user-select: none;
  -ms-user-select: none;
  user-select: none;
}

/* html */
<div> first </div>
<div class='unhighlightable-text'> second </div> 
<div> third </div>

This works as intended VISUALLY: JSfiddle However if you actually go and copy paste all three divs, 'second' always gets copied.

I looked at Making line numbers uncopyable. But it requires using CSS generated counter to resolve the issue. In my case, the uncopyable portion is generated using JS.

Is there a way to create unselectable and uncopyable text in html without using javascript or restructuring the dom?

Edit

As to why I'm doing this, here is my use case: I have dynamically generated rows of content that I render incrementally. Each row has 2 inline-block divs, the first div contains meta-information, the second div contains useful content. If the user only wants to copy the useful content (which is a frequent usecase), then they will end up copying the first div as well. Since these rows are dynamically rendered (I'm using EmberJS and ember-collection), I can't use a table view and am forced have each row be self-contained.

like image 432
user4998087 Avatar asked Jun 08 '26 15:06

user4998087


1 Answers

::before content will be both unselectable and uncopyable.

[data-content]::before {
  content: attr(data-content); 
}
<div> first </div>
<div data-content='second'></div>
<div> third </div>

Donate For Us

If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!