2012-01-22 21 views
5

Estoy buscando una forma de calcular la posición de inicio y final de una selección de usuarios desde un elemento padre conocido. Me encontré con this con algunas pequeñas modificaciones. Pude trabajar para FF, pero no estoy seguro de cómo hacerlo en IE y me gustaría tener algunas ideas si mi modificación es apropiada. Muchas gracias a Tim Down por la respuesta original.Calcule la posición de inicio y final de la selección de usuario utilizando javascript desde un elemento primario

function getBodyTextOffset(node, offset) { 
    var sel = window.getSelection(); 
    var range = document.createRange(); 
    range.selectNodeContents(document.getElementById('test')); 
    range.setEnd(node, offset); 
    sel.removeAllRanges(); 
    sel.addRange(range); 
    return sel.toString().length; 
} 

function getSelectionOffsets() { 
    var sel, range; 
    var start = 0, end = 0; 
    if (window.getSelection) { 
     sel = window.getSelection(); 
     if (sel.rangeCount) { 
      range = sel.getRangeAt(sel.rangeCount - 1); 
      start = getBodyTextOffset(range.startContainer, range.startOffset); 
      end = getBodyTextOffset(range.endContainer, range.endOffset); 
      sel.removeAllRanges(); 
      sel.addRange(range); 
      alert(start + ", " + end); 
     } 
    } else if (document.selection) { 
     // IE stuff here 
    } 
    return { 
     start: start, 
     end: end 
    }; 
} 

Sé que este ha sido un tiempo, pero aquí es una JSFiddle mostrando la idea. Nuevamente funciona en FF y Chrome pero no en IE9. Idealmente, me gustaría poder obtener el desplazamiento desde el principio de la prueba del elemento.

+1

reducido [jsfiddle] (http://jsfiddle.net/) demostración mejorará en gran medida sus posibilidades de recibir una buena respuesta. – c69

+0

Mira [Rangy] (http://code.google.com/p/rangy/). Es posible que pueda traducir su código actual muy de cerca. – Hemlock

Respuesta

1

gama JavaScript es un tema doloroso, aunque aquí hay algunos buenos recursos ...

Éstos son algunos demos que se pueden utilizar como referencia ...

http://dylanschiemann.com/articles/dom2Range/dom2RangeExamples.html

Una vaga aunque de partida decente punto para entender qué métodos y propiedades están disponibles ... http://help.dottoro.com/ljxsqnoi.php

Puede descubrir lo que contiene lo que utiliza el siguiente JavaScript ...

for (i in window.getSelection()) {alert('i = '+i);} 

Cuando vea un objeto mencionado puede añadir, sólo asegúrese de que sabe también utilizar paréntesis para métodos y en raras ocasiones parámetros tales como la de abajo ...

for (i in window.getSelection().getRangeAt(0)) {alert('i = '+i);} 

también hay un error de rango muy desagradable en los navegadores Gecko (por ejemplo, Firefox) donde si mueves el mouse un poco afuera de un elemento aunque menos del 50% de una letra/personaje que Gecko establece incorrectamente el elemento de límite a ese elemento aunque no haya sido seleccionado. Es excepcionalmente desagradable tratar de descubrir qué es y Mozilla realmente se ha negado a arreglarlo (como lo han hecho con muchos otros errores donde claramente están equivocados), aquí está el enlace para la publicación de errores que hice ...

https://bugzilla.mozilla.org/show_bug.cgi?id=696571

espero que esto le conseguirá que se mueve en la dirección correcta.

Cuestiones relacionadas