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.
reducido [jsfiddle] (http://jsfiddle.net/) demostración mejorará en gran medida sus posibilidades de recibir una buena respuesta. – c69
Mira [Rangy] (http://code.google.com/p/rangy/). Es posible que pueda traducir su código actual muy de cerca. – Hemlock