Este es un método que se me ocurrió.
Utiliza una etiqueta <span>
en lugar de <a>
, pero se comporta como un enlace normal con algunas bonificaciones. Cuando se pasa el texto, hay un tiempo de espera de 500 milisegundos que cambiará el cursor al cursor de selección de texto. Al hacer clic y arrastrar el texto no se activa una acción de clic, sin embargo, al hacer doble clic en el texto (para seleccionar palabras enteras) aún se activa el evento de clic. Esto podría mejorarse, pero funciona bien y podría usarse en producción.
Otra posibilidad para hacer esto aún mejor sería cuando se ejecuta el tiempo de espera, sino que también muestra un pequeño icono del portapapeles en la parte superior derecha del botón que pueden hacer clic para copiar el texto a su portapapeles. Cuando .mouseout()
del botón ocultaría este icono del portapapeles.
Además, otra característica podría ser borrar la selección de texto cuando el mouse deja el botón. (Clear Text Selection with JavaScript)
HTML
<span data-href="javascript:alert('This is the click action.');" class="link selectable">
<span>[email protected]</span>
</span>
CSS
.link {
font: 16px/0 Tahoma, sans-serif;
padding: 15px 30px;
border: 1px solid #0079be;
border-radius: 4px;
color: #0079be;
cursor: pointer;
}
.link:hover {
color: #fff;
background: #0079be;
}
.link.selectable > span {
display: inline-block;
}
.link.selectable.selecting > span {
cursor: text;
}
JavaScript
$('.link.selectable > span').hover(
function() {
var selectableTimeout = setTimeout(
function(elem) {
$(elem).parent().addClass('selecting');
},
500, this
);
$(this).data('selectableTimeout', selectableTimeout);
},
function() {
clearTimeout($(this).data('selectableTimeout'));
$(this).parent().removeClass('selecting');
}
);
$('.link.selectable').mousedown(
function(e) {
$(this).data('mouseX', e.pageX);
$(this).data('mouseY', e.pageY);
}
);
$('.link.selectable').mouseup(
function(e) {
var mouseX = $(this).data('mouseX');
var mouseY = $(this).data('mouseY');
if (mouseX && mouseY && mouseX === e.pageX && mouseY === e.pageY) {
window.location.href = $(this).attr('data-href');
}
}
);
https://jsfiddle.net/gavin310/6efdyq4h/
Creo que primero debes averiguar cómo te imaginas que funciona. ¿Cómo llegar al enlace si hacer clic en él no te lleva a ninguna parte? ¿Cómo seleccionarías el texto si no puedes hacer clic en él? –