2009-08-23 10 views
39

Tengo una tabla, y les permito a los usuarios 'seleccionar' varias filas. Todo esto se maneja usando eventos jQuery y algunos CSS para indicar visualmente que la fila está 'seleccionada'. Cuando el usuario presiona shift, es posible seleccionar varias filas. A veces, esto hace que el texto se resalte. ¿Hay alguna forma de prevenir esto?Prevenir lo más destacado de la tabla de texto

+0

posible duplicado de [regla CSS para desactivar el resaltado de selección de texto] (http://stackoverflow.com/questions/826782/css-rule-to- disable-text-selection-highlighting) – Dan

Respuesta

71

Hay una propiedad de CSS3 para eso.

#yourTable { 
    -webkit-touch-callout: none; 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
+20

Lástima que a Internet Explorer no le importe. Probado en 6-8. –

+1

@NathanTaylor Después de buscar en Google, encontrará un duplicado donde esto ya está resuelto: http://stackoverflow.com/questions/826782/css-rule-to-disable-text-selection-highlighting – Dan

+0

'Validation (CSS 3.0):" moz-none "no es un valor válido para la propiedad" -moz-user-select ". Y, de hecho, esto no funcionó para Firefox hasta que cambié' moz-none' a 'none'. – Nolonar

1

Puede probar con la función de enfoque() en el texto seleccionado - la selección desaparece.

$('#someEl').focus(); 
30

Si usted quiere tener el control cuando los usuarios pueden seleccionar o no partes de su sitio, se puede utilizar este little jQuery plugin.

jQuery.fn.extend({ 
     disableSelection : function() { 
       return this.each(function() { 
         this.onselectstart = function() { return false; }; 
         this.unselectable = "on"; 
         jQuery(this).css('user-select', 'none'); 
         jQuery(this).css('-o-user-select', 'none'); 
         jQuery(this).css('-moz-user-select', 'none'); 
         jQuery(this).css('-khtml-user-select', 'none'); 
         jQuery(this).css('-webkit-user-select', 'none'); 
       }); 
     } 
}); 

y utilizarlo como:

// disable selection on #theDiv object 
$('#theDiv').disableSelection(); 

De lo contrario, sólo puede utilizar estos atributos de CSS dentro de su archivo css como:

#theDiv 
{ 
    -webkit-user-select: none; 
    -khtml-user-select: none; 
    -moz-user-select: none; 
    -ms-user-select: none; 
    user-select: none; 
} 
3

Simplemente elimino la selección que se realiza con la tecla Mayús. Esto podría mostrar un poco de parpadeo aunque

if (event.shiftKey) { 
    window.getSelection().removeAllRanges() 
} 
13

Sólo una nota en la respuesta de Cleiton arriba - el ejemplo de código parece funcionar bien, pero con el fin de ser un buen ciudadano en el mundo jQuery, debe devolver el jQuery objeto al final de la función para que sea chainable - una simple adición de una línea fija que hasta:

jQuery.fn.extend({ 
    disableSelection : function() { 
      this.each(function() { 
        this.onselectstart = function() { return false; }; 
        this.unselectable = "on"; 
        jQuery(this).css('-moz-user-select', 'none'); 
      }); 
      return this; 
    } 
}); 

Saludos, espero que esto es útil.

+2

Hace esto con "return this.each (function() {..." – frontendbeauty

1

Si tiene jQuery UI en sus páginas, sólo tiene que utilizar

$("element-selector").disableSelection(); 
+1

Esto no está documentado, pero debería funcionar si tiene jQuery UI core –

+0

Lo bueno de esta solución es que también es aplicable a IE y replica la funcionalidad de soluciones ya mencionadas si mira el código. – sksallaj

+1

Tenga en cuenta que disableSelection() está en desuso en jQuery UI 1.9 – mar10

0
::-moz-selection { /* Code for Firefox */ 
    color: black; 
    background: none; 
} 

::selection { 
    color: black; 
    background: none; 
} 

de http://www.w3schools.com/cssref/sel_selection.asp
en realidad de la sección de try-que, después de cambiar los valores.
note que el cursor todavía tiene forma de 'I' ...

+0

Nota: El pseudo-elemento :: selection se redactó para el nivel 3 de selectores de CSS, pero se eliminó antes del estado de recomendación. el momento, el pseudo-elemento :: selection no está en ninguna especificación. (Sin embargo, puede volverse a agregar a futuras especificaciones CSS). – luk2302

Cuestiones relacionadas