Ver Mensaje Individual
  #1 (permalink)  
Antiguo 01/08/2006, 10:08
Avatar de [HH]KaoS
[HH]KaoS
 
Fecha de Ingreso: diciembre-2004
Ubicación: Nerja, Málaga (España)
Mensajes: 216
Antigüedad: 19 años, 5 meses
Puntos: 6
caretPos y createTextRange

Chicos tengo un problema stoy haciendo un editor para una plataforma de ayuda a la docencia que estamos haciendo (proximamente GPL) y tengo problemas con Javascript, estoy intentando conseguir dos cosas.

Que al insertar una etiqueta me la inserte donde está situado el cursor, y que si no hay una selección a la que añadir la etiqueta, por ej-> <b>inserte el texto en negrita aquí</b> que el texto "inserte el texto en negrita aquí" quede seleccionado.

Mi problema es que no comprendo bien el funcionamiento del caretPos y createTextRange. Ambos me devuelven undefined aún estando alguna zona seleccionado y juraría que los nombres están correctos. les dejo aquí parte del codigo.

Formulario
Código:
<form action="" method="post" name="editor" onsubmit="return checkForm(this)" id="editor">
.....
<textarea 
        name="message" 
        id="message" 
        cols="35" 
        rows="15" 
        wrap="VIRTUAL"
        style="width:359px" 
        tabindex="3" 
        onselect ="storeCaret(this);" 
	onclick ="storeCaret(this);" 
	onkeyup ="storeCaret(this);"
	onchange ="storeCaret(this);" 
	><?php if(isset($message) && strcmp($op,"prev")==0) echo $message;?>
</textarea>
Funcion storecaret
Código:
// Remember the current position.
function storeCaret(textEl) {
	// Only bother if it will be useful.
	if (typeof(textEl.createTextRange) != 'undefined')
		text.caretPos = document.selection.createRange().duplicate();
}
Función meter (la cogí de un ejemplo de este foro)
Código:
function meter(text) 
{
		          //documento.nombre_formulario.nombre_campo
	var postopic = document.editor.message;
	if (postopic.createTextRange && postopic.caretPos) 
	{
		var caretPos= postopic.caretPos;      
		caretPos.text = caretPos.text.charAt(caretPos.text.length - 1) == ' ' ? 
		
		text + ' ' : text;
	}
	else 
		postopic.value += text;
	postopic.focus(caretPos)
	

}
El resto de la información se la dejo aquí por si quieren descargarse el ejemplo completo:
Plataforma que estamos desarollando: https://swad.ugr.es
Editor en pruebas: http://quickwebdeluxe.com/editor/editor.php
Archivo JS: http://quickwebdeluxe.com/editor/funciones_editor.js

Un saludo y gracias por adelantado.
Raúl
__________________
Más información sobre mi: Raúl Jiménez