2011-05-31 13 views
16

que tiene esta funciónuna selección en Firefox

function smth() { 
var container = null; 
var newContainer = null; 
if (window.getSelection) { // all browsers, except IE before version 9 
    alert("first if"); 
    var selectionRange = window.getSelection(); 
    if (selectionRange.rangeCount > 0) { 
     var range = selectionRange.getRangeAt(0); 
     container = range.commonAncestorContainer; 
     newContainer = container; 
    } 
} 
else { 
    if (document.selection) { // Internet Explorer 
     alert("second if"); 
     var textRange = document.selection.createRange(); 
     container = textRange.parentElement(); 
    } 
} 

if (newContainer) { 
    return newContainer.nodeName; 
} 
else { 
    alert("Container object for the selection is not available!"); 
} 
}  

Ahora, después hago lo que tengo que hacer con la selección lo que necesito para desactivarla. intenté algunas cosas, nada funcionó, ¿alguna idea?

document.selection.clear()  

esto didnt work.

Respuesta

58

Para el navegador problemática:

document.selection.empty() 

Para otros navegadores:

window.getSelection().removeAllRanges() 

Ver http://help.dottoro.com/ljigixkc.php

+0

Gracias, que ayudó a – Ovi

+0

no funcionará como se espera, por ejemplo, dentro de una ventana del editor TinyMCE (un iframe en realidad). Tendrá que usar: tinymce.activeEditor.selection.collapse(); – Recoil

+1

"Para el navegador problemático" ya no es el caso. La última opción aquí funciona para todos los navegadores, incluidas las versiones recientes de IE. (Suponiendo que te refieres a IE por "problemático") – Porschiey

0

Nota: en caso de que usted está seleccionando el texto de un elemento de entrada o área de texto a continuación, su el código tendría más soporte de navegador cruzado si utilizara el método de selección de elemento html nativo estándar de la entrada o área de texto.

Si se seleccionó un elemento html input o textarea utilizando el método de selección nativo, utilizar los métodos sugeridos anteriormente no funciona en mi Firefox 44.0.2. Lo que funcionó para él, y supongo que funciona en TODOS LOS NAVEGADORES, está ejecutando el siguiente código que crea un elemento nuevo y lo selecciona. El nuevo elemento no puede estar en display:none o visibility:hidden porque no está seleccionado en mi Firebox, así que el truco es hacerlo invisible al forzar todos los atributos de tamaño a 0\none.

var tempElement = document.createElement("input"); 
tempElement.style.cssText = "width:0!important;padding:0!important;border:0!important;margin:0!important;outline:none!important;boxShadow:none!important;"; 
document.body.appendChild(tempElement); 
tempElement.select(); 
/* Use removeChild instead of remove because remove is less supported */ 
document.body.removeChild(tempElement); 
+0

Eso funciona, pero roba el foco del campo de entrada. –

+0

@LawrenceDol Luego, puede volver a enfocar el campo de entrada después de ejecutar esto, si perder el foco es un problema para usted. –

0

Uso tinymce.activeEditor.selection.collapse() si eso no funciona, entonces utilice const range = tinymce.activeEditor.dom.createRng(); tinymce.activeEditor.selection.setRng(range)

Cuestiones relacionadas