Foros del Web » Programando para Internet » Javascript »

Un FAQ guiado para novatos en JavaScript

Estas en el tema de Un FAQ guiado para novatos en JavaScript en el foro de Javascript en Foros del Web. Hoy os vengo con una aportación a la comunidad. Estos días he estado recopilando posts habituales de los webmasters que, normalmente, poco o nada saben ...
  #1 (permalink)  
Antiguo 02/06/2007, 13:13
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Un FAQ guiado para novatos en JavaScript

Hoy os vengo con una aportación a la comunidad.

Estos días he estado recopilando posts habituales de los webmasters que, normalmente, poco o nada saben del lenguaje de cliente que nos gusta, y vienen reclamando ayuda sobre cómo hacer efectos simples.

Respuestas a los típicos "¿Cómo hago para que al hacer click en un botón...?", "¿Qué función utilizo para que al pasar por encima de una imagen...?", "¿Cómo hago para que no me deje enviar el formulario si...?" suelen tener respuesta sencilla en un buscador cualquiera o en las FAQ, pero a veces es complicado buscar incluso en el índice temático de Carlitos (el cual está bastante bien, no digo que no).


Se me ocurrió una idea, una especie de FAQ interactivo. Esto es, guiado, respondiendo a las preguntas que se hace el programador. Por ejemplo, al comienzo de este FAQ habrían unas opciones básicas iniciales:
Código:
+ AL HACER ALGO
+ SIN HACER NADA, QUE SE EJECUTE DIRECTAMENTE EL CÓDIGO
+ QUE SE EJECUTE CON UNA DEMORA DE X SEGUNDOS
+ OPERACIONES CON NÚMEROS, FECHAS, FRASES (strings)
+ OPERACIONES ENTRE LENGUAJES DE CLIENTE (JS) Y SERVIDOR (PHP, ASP, JAVA)
+ OBTENER DATOS DEL CLIENTE / DOCUMENTO
Todas las opciones serían expandibles, de modo que al hacer click en cada una de ellas aparecerían varias sub-opciones posibles en forma de árbol que nos permiten llegar a la solución final. Un ejemplo para aquel que quiere que al terminar de cargarse la página, en una caja de texto se coloque el String "hola":
Código:
+ AL HACER ALGO
+-- AL TERMINAR DE CARGARSE LA PÁGINA
+-+ CAMBIAR EL VALOR DE UN FORMULARIO
	+-- Cambiar el texto (valor) o añadirlo a una caja de texto

		<código final comentado>
		<explicación breve del código>



Creo que sería una buena idea para que la gente se interesase más por el javascript, vea su potencia y aprenda rápida y cómodamente cómo hacer las cosas que más interesan, más coloquiales.

Además se podría incluir un buscador para encontrar nuestras consultas sin tener que estar buscando la opción.




Necesito opiniones sobre este sistema, si funcionaría o no, si lo utilizaría la gente, o si no merece la pena implementar una cosa tan costosa por amor al arte.

El guión del árbol que he escrito estos días lo dejo posteado, para el que se lo quiera leer y aportar u opinar:
Código:
TUTORIAL HOWTO JAVASCRIPT (GUIÓN)

+ AL HACER ALGO
+-- AL TERMINAR DE CARGARSE LA PÁGINA
+-- AL MOVER EL RATÓN
+-- AL HACER CLICK O DOBLE CLICK O CLICK DCHO EN EL DOCUMENTO
+-- (relacionado con cajas de texto <INPUT TYPE="TEXT"/>)
+-- (relacionado con cajas de seleccion <SELECT>)
+-- (relacionado con botones <INPUT TYPE="button"/>)
+-- (relacionado con enviar formularios <INPUT TYPE="submit"/>, incluye validaciones)
+-- (relacionado con capas <DIV>)
+-- (relacionado con <TEXTAREA>)
+-- MARCAR O DESMARCAR UN CHECKBOX O UN RADIO <INPUT TYPE="checkbox"/> <INPUT TYPE="radio"/>
+-- HACER SCROLL EN LA PÁGINA
+-- VOLVER A VISITAR POR SEGUNDA O TERCERA VEZ LA PÁGINA
+-- SALIR DE LA PÁGINA ACTUAL (cargar otra o cerrar la ventana)
+-- (relacionado con imágenes <IMG />)
+-- AL SELECCIONAR TEXTO DE LA PÁGINA


+ SIN HACER NADA, QUE SE EJECUTE DIRECTAMENTE EL CÓDIGO

+ QUE SE EJECUTE CON UNA DEMORA DE X SEGUNDOS



+ ACCIONES
+-- ABRIR UN POPUP (ventana emergente)
	+-- VARIABLES PERSONALIZADAS (tamaño, centrado, al tamaño de imagen..)
+-- REDIRECCIONAR A OTRA PÁGINA
+-- ENVIAR UN FORMULARIO DE LA PÁGINA
+-- CERRAR LA VENTANA
+-- IMPRIMIR LA PÁGINA U OTRO CONTENIDO
+-- GUARDAR, LEER, MODIFICAR, ELIMINAR UNA COOKIE
+-- INTERCAMBIAR / CAMBIAR IMÁGENES
+-- AÑADIR / CREAR ELEMENTOS HTML DINÁMICAMENTE (incluye texto dinámicamente)
+-- ELIMINAR ELEMENTOS HTML, SUSTITUIRLOS
+-- OCULTAR O MOSTRAR ELEMENTOS HTML
+-- ALERTAR DE ALGO CON UNA VENTANA DIÁLOGO (ALERT() botón aceptar)
+-- PEDIR CONFIRMACIÓN CON UNA VENTANA DIÁLOGO (CONFIRM() botones "sí", "no", "cancelar")
+-- PEDIR UN DATO CON UNA VENTANA DE DIÁLOGO (PROMPT() ventana con una caja de texto)
+-- CAMBIAR DE ESTILO (formato, color, tamaño, posición...) DE CUALQUIER ELEMENTO HTML (estilo interno / CSS externo)
+-+ CAMBIAR EL VALOR DE UN FORMULARIO
	+-- El segundo select dependiente del primero (o el tercero del segundo)
	+-- Seleccionar un valor de un select
	+-- Cambiar el texto (valor) o añadirlo a una caja de texto (Colocar total de suma de números también)
	+-- Cambiar el texto (valor) a un textarea
	+-- Checkear o marcar un checkbox o un radio
	+-- Cambiar el texto de un botón
+-- DESHABILITAR UN CAMPO DE UN FORMULARIO
+-- CONTAR CUANTOS CHECKBOX SE HAN SELECCIONADO / CAMPOS SE HAN RELLENADO
+-- MANDAR A CIERTO PUNTO DE LA PÁGINA ACTUAL
+-- OBTENER DATOS DEL SERVIDOR con UNA LLAMADA AJAX
+-- VALIDACIONES CONCRETAS
	+-- TELÉFONO
	+-- EMAIL
	+-- DNI, PASAPORTE, NIF, CIF
	+-- DIA, HORA, FECHA, INTERVALO DE DIAS, HORAS, FECHAS
	+-- POR CANTIDAD NUMÉRICA
	+-- POR LONGITUD (letras, palabras, frases)
	+-- QUE SÓLO ADMITA CIERTO TIPO DE CARACTERES (números, letras, guiones)
+-- FILTRAR ELEMENTOS DE UNA LISTA / TABLA / SELECT. Cualquier enumeración
+-- ORDENAR UNA LISTA / TABLA / SELECT. Cualquier enumeración



+ OPERACIONES CON NÚMEROS, FECHAS, FRASES (strings)
+-- AÑADIR O RESTAR SEGUNDOS, MINUTOS, HORAS, DÍAS, SEMANAS, MESES, AÑOS A UNA FECHA
+-- AÑADIR O RESTAR DÍAS HÁBILES O LABORALES
+-- CALCULAR LA MEDIA
+-- REDONDEAR
+-- FORMATEAR UN NÚMERO
+-- DETECTAR DOS LETRAS / PALABRAS / ESPACIOS SEGUIDAS IGUALES
+-- DETECTAR PALABRAS REPETIDAS EN UNA LISTA DE PALABRAS
+-- ELIMINAR ESPACIOS SOBRANTES DE UN STRING (trimming)



+ OPERACIONES ENTRE LENGUAJES DE CLIENTE (JS) Y SERVIDOR (PHP, ASP, JAVA)
+-- PETICIONES AJAX
+-- INTERCAMBIAR VARIABLES ENTRE LENGUAJES (TAMBIÉN ARRAYS)



+ OBTENER DATOS DEL CLIENTE / DOCUMENTO
+-- SISTEMA OPERATIVO (PLATAFORMA) Y VERSIÓN
+-- NAVEGADOR Y VERSIÓN
+-- TAMAÑO Y RESOLUCIÓN DE LA VENTANA / PANTALLA DEL NAVEGADOR / ORDENADOR DEL CLIENTE
+-- SI JAVASCRIPT ESTÁ ACTIVADO EN EL NAVEGADOR
+-- HORA DEL CLIENTE
+-- OBTENER GRUPOS DE ELEMENTOS (ENLACES, IMAGENES, FORMULARIS, FRAMES...)
+-- OBTENER URL Y VARIABLES DE LA URL




+ ACCIONES QUE NO SE PUEDEN LOGRAR SÓLO CON JAVASCRIPT
+-- MANDAR EMAILS
+-- ESCRIBIR EN UN ARCHIVO DE TEXTO, O LEERLO
+-- TRABAJAR CON UNA BASE DE DATOS
+-- SUBIR ARCHIVOS AL SERVIDOR
+-- OBTENER LA HORA / VARIABLES DEL SERVIDOR
+-- OCULTAR TU CÓDIGO
+-- ENCUESTAS / CONTADORES DE VISITAS / SISTEMAS USUARIO CONTRASEÑAS
+-- MANEJAR PÁGINAS WEB AJENAS (ENVIAR FORMULARIOS AJENOS, SCROLL, CAMBIAR CONTENIDO...)
+-- MANEJAR EL SISTEMA OPERATIVO (CAMBIAR LAS VENTANAS DE DIÁLOGO ALERT() O CONFIRM(), ELIMINAR CONFIRMACIONES DE IMPRIMIR O GUARDAR, ELIMINAR BARRA DE TÍTULO DEL NAVEGADOR, ABRIR UN MENÚ, AÑADIR A FAVORITOS SIN CONFIRMACIÓN... GENERALMENTE TODOS LOS "ABUSOS" AL USUARIO)




Bueno, comentarios bienvenidos.

Saludos y gracias una vez más por leerme
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #2 (permalink)  
Antiguo 02/06/2007, 15:02
Avatar de Shiryu_Libra
Colaborador
 
Fecha de Ingreso: febrero-2007
Ubicación: Cantando "Screenager" en "Kirafa Kaput"
Mensajes: 3.614
Antigüedad: 17 años, 1 mes
Puntos: 88
Re: Un FAQ guiado para novatos en JavaScript

Excelente idea Derkenuke

aprovechando eso de la busqueda y ya que estas hablando de javascript, tambien se podria atacar directamente al arbol de FAQS, en ves de presionar un boton de submit,

ir FILTRANDO como tiene JavierB, que aplica directamente

una sugerencia, buena iniciativa
saludos
__________________
"Eres parte del problema, parte de la solucion o parte del paisaje"
Un Saludo desde Desierto de Altar, Sonora, MX.
Shiryu_libra
  #3 (permalink)  
Antiguo 02/06/2007, 15:38
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Un FAQ guiado para novatos en JavaScript

Cita:
Iniciado por Shiryu_Libra
ir FILTRANDO como tiene JavierB, que aplica directamente
Sí, es una buena idea lo de ir filtrando. Tiene sus ventajas e inconvenientes. No busco el efecto más vistoso, sino el más pedagógico. Lo malo de este sistema es que oculto las opciones que no concuerden, lo bueno es que queda más limpia la página mostrándose sólo lo que en teoría interesa. Quizás sea la mejor opción dado el tamaño de la página en sí.


De todas maneras el sistema de búsqueda sería un caso aparte de la cuestión principal.

Buen aporte. Gracias!
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #4 (permalink)  
Antiguo 04/06/2007, 06:27
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Un FAQ guiado para novatos en JavaScript

He hecho un ejemplo sencillo base de cómo sería la cosa. Parece mucho código pero es sólo mucha estructura HTML, algo de CSS para coloritos y simple javascript para controlar cuando expandir y cuando contraer:

Lo voy a tener que poner en dos partes

Código PHP:
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN">
<
html>
<
head>
<
title>FAQ Javascript interactivo-guiado</title>
<
meta name="Author" content="derkeNuke">
<
style>
#menuInicial {
    
background-color:#89f;
    
border:solid 1px black;
    
cursor:pointer;
    
padding:4px;
}
#menuEventos {
    
background-color:#abf;
    
border:solid 1px black;
    
cursor:pointer;
    
padding:4px;
}
#menuAcciones {
    
background-color:#fab;
    
border:solid 1px black;
    
cursor:pointer;
    
padding:4px;
}
#menuOps1 {
    
background-color:#aff;
    
border:solid 1px black;
    
cursor:pointer;
    
padding:4px;
}
#menuOps2 {
    
background-color:#8f9;
    
border:solid 1px black;
    
cursor:pointer;
    
padding:4px;
}
#menuObtener {
    
background-color:#0ae;
    
border:solid 1px black;
    
cursor:pointer;
    
padding:4px;
}
#menuNo {
    
background-color:#700;
    
border:solid 1px black;
    
color:#f00;
    
padding:4px;
}

.
hover {
    
background-color:#ff9;
}

#sinCodigo {
    
background-color:#f00;
    
bordersolid 3px black;
    
padding:4px;
    
color:black;
}
</
style>
</
head>

<
body>

<
div id="cuerpo">

    <
div id="menuInicial">
        <
div class="inicial" show="menuEventos">1.AL HACER ALGO</div>
        <
div class="inicial" show="menuAcciones">2.SIN HACER NADAQUE SE EJECUTE DIRECTAMENTE EL CÓDIGO</div>
        <
div class="inicial" show="menuAcciones">3.QUE SE EJECUTE CON UNA DEMORA DE X SEGUNDOS</div>
        <
div class="inicial" show="menuOps1">4.OPERACIONES CON NÚMEROSFECHASFRASES (strings)</div>
        <
div class="inicial" show="menuOps2">5.OPERACIONES ENTRE LENGUAJES DE CLIENTE (JSY SERVIDOR (PHPASPJAVA)</div>
        <
div class="inicial" show="menuObtener">6.OBTENER DATOS DEL CLIENTE DOCUMENTO</div>
        <
div class="inicial" show="menuNo">7.ACCIONES QUE NO SE PUEDEN LOGRAR SÓLO CON JAVASCRIPT</div>
    </
div>


    <
div id="menuEventos">
        <
div class="evento" show="menuAcciones">1.AL TERMINAR DE CARGARSE LA PÁGINA</div>
        <
div class="evento" show="menuAcciones">2.AL MOVER EL RATÓN</div>
        <
div class="evento" show="menuAcciones">3.AL HACER CLICK O DOBLE CLICK O CLICK DCHO EN EL DOCUMENTO</div>
        <
div class="evento" show="menuAcciones">4.- (relacionado con cajas de texto &lt;INPUT TYPE="TEXT"/&gt;)</div>
        <
div class="evento" show="menuAcciones">5.- (relacionado con cajas de seleccion &lt;SELECT&gt;)</div>
        <
div class="evento" show="menuAcciones">6.- (relacionado con botones &lt;INPUT TYPE="button"/&gt;)</div>
        <
div class="evento" show="menuAcciones">7.- (relacionado con enviar formularios &lt;INPUT TYPE="submit"/&gt;, incluye validaciones)</div>
        <
div class="evento" show="menuAcciones">8.- (relacionado con capas &lt;DIV&gt;)</div>
        <
div class="evento" show="menuAcciones">9.- (relacionado con &lt;TEXTAREA&gt;)</div>
        <
div class="evento" show="menuAcciones">10.AL MARCAR O DESMARCAR UN CHECKBOX O UN RADIO &lt;INPUT TYPE="checkbox"/&gt; &lt;INPUT TYPE="radio"/&gt;</div>
        <
div class="evento" show="menuAcciones">11.AL HACER SCROLL EN LA PÁGINA</div>
        <
div class="evento" show="menuAcciones">12.AL VOLVER A VISITAR POR SEGUNDA O TERCERA VEZ LA PÁGINA</div>
        <
div class="evento" show="menuAcciones">13.AL SALIR DE LA PÁGINA ACTUAL (cargar otra o cerrar la ventana)</div>
        <
div class="evento" show="menuAcciones">14.- (relacionado con imágenes &lt;IMG />)</div>
        <
div class="evento" show="menuAcciones">15.AL SELECCIONAR TEXTO DE LA PÁGINA</div>
    </
div>

    <
div id="menuAcciones">
        <
div class="accion" show="sinCodigo">1.ABRIR UN POPUP (ventana emergente)</div>
        <
div class="accion" show="sinCodigo">2.REDIRECCIONAR A OTRA PÁGINA</div>
        <
div class="accion" show="sinCodigo">3.ENVIAR UN FORMULARIO DE LA PÁGINA</div>
        <
div class="accion" show="sinCodigo">4.CERRAR LA VENTANA</div>
        <
div class="accion" show="sinCodigo">5.IMPRIMIR LA PÁGINA U OTRO CONTENIDO</div>
        <
div class="accion" show="sinCodigo">6.GUARDARLEERMODIFICARELIMINAR UNA COOKIE</div>
        <
div class="accion" show="sinCodigo">7.INTERCAMBIAR CAMBIAR IMÁGENES</div>
        <
div class="accion" show="sinCodigo">8.AÑADIR CREAR ELEMENTOS HTML DINÁMICAMENTE (incluye texto dinámicamente)</div>
        <
div class="accion" show="sinCodigo">9.ELIMINAR ELEMENTOS HTMLSUSTITUIRLOS</div>
        <
div class="accion" show="sinCodigo">10.OCULTAR O MOSTRAR ELEMENTOS HTML</div>
        <
div class="accion" show="sinCodigo">11.ALERTAR DE ALGO CON UNA VENTANA DIÁLOGO (ALERT() botón aceptar)</div>
        <
div class="accion" show="sinCodigo">12.PEDIR CONFIRMACIÓN CON UNA VENTANA DIÁLOGO (CONFIRM() botones "sí\", \"no\", \"cancelar\")</div>
        <div class="
accion" show="sinCodigo">13.- PEDIR UN DATO CON UNA VENTANA DE DIÁLOGO (PROMPT() ventana con una caja de texto)</div>
        <div class="
accion" show="sinCodigo">14.- CAMBIAR DE ESTILO (formato, color, tamaño, posición...) DE CUALQUIER ELEMENTO HTML (estilo interno / CSS externo)</div>
        <div class="
accion" show="sinCodigo">15.- CAMBIAR EL VALOR DE UN FORMULARIO</div>
        <div class="
accion" show="sinCodigo">16.- DESHABILITAR UN CAMPO DE UN FORMULARIO</div>
        <div class="
accion" show="sinCodigo">17.- CONTAR CUANTOS CHECKBOX SE HAN SELECCIONADO / CAMPOS SE HAN RELLENADO</div>
        <div class="
accion" show="sinCodigo">18.- MANDAR A CIERTO PUNTO DE LA PÁGINA ACTUAL</div>
        <div class="
accion" show="sinCodigo">19.- OBTENER DATOS DEL SERVIDOR con UNA LLAMADA AJAX</div>
        <div class="
accion" show="sinCodigo">20.- VALIDACIONES CONCRETAS</div>
        <div class="
accion" show="sinCodigo">21.- FILTRAR ELEMENTOS DE UNA LISTA / TABLA / SELECT. Cualquier enumeración</div>
        <div class="
accion" show="sinCodigo">22.- ORDENAR UNA LISTA / TABLA / SELECT. Cualquier enumeración</div>
    </div>


    <div id="
menuOps1">
        <div class="
ops1" show="sinCodigo">1.- AÑADIR O RESTAR SEGUNDOS, MINUTOS, HORAS, DÍAS, SEMANAS, MESES, AÑOS A UNA FECHA</div>
        <div class="
ops1" show="sinCodigo">2.- AÑADIR O RESTAR DÍAS HÁBILES O LABORALES</div>
        <div class="
ops1" show="sinCodigo">3.- CALCULAR LA MEDIA</div>
        <div class="
ops1" show="sinCodigo">4.- REDONDEAR</div>
        <div class="
ops1" show="sinCodigo">5.- FORMATEAR UN NÚMERO</div>
        <div class="
ops1" show="sinCodigo">6.- DETECTAR DOS LETRAS / PALABRAS / ESPACIOS SEGUIDAS IGUALES</div>
        <div class="
ops1" show="sinCodigo">7.- DETECTAR PALABRAS REPETIDAS EN UNA LISTA DE PALABRAS</div>
        <div class="
ops1" show="sinCodigo">8.- ELIMINAR ESPACIOS SOBRANTES DE UN STRING (trimming)</div>
    </div>


    <div id="
menuOps2">
        <div class="
ops2" show="sinCodigo">1.- PETICIONES AJAX</div>
        <div class="
ops2" show="sinCodigo">2.- INTERCAMBIAR VARIABLES ENTRE LENGUAJES (TAMBIÉN ARRAYS)</div>
    </div>


    <div id="
menuObtener">
        <div class="
obtener" show="sinCodigo">1.- SISTEMA OPERATIVO (PLATAFORMA) Y VERSIÓN</div>
        <div class="
obtener" show="sinCodigo">2.- NAVEGADOR Y VERSIÓN</div>
        <div class="
obtener" show="sinCodigo">3.- TAMAÑO Y RESOLUCIÓN DE LA VENTANA / PANTALLA DEL NAVEGADOR / ORDENADOR DEL CLIENTE</div>
        <div class="
obtener" show="sinCodigo">4.- SI JAVASCRIPT ESTÁ ACTIVADO EN EL NAVEGADOR</div>
        <div class="
obtener" show="sinCodigo">5.- HORA DEL CLIENTE</div>
        <div class="
obtener" show="sinCodigo">6.- OBTENER GRUPOS DE ELEMENTOS (ENLACES, IMAGENES, FORMULARIS, FRAMES...)</div>
        <div class="
obtener" show="sinCodigo">7.- OBTENER URL Y VARIABLES DE LA URL</div>
    </div>


    <div id="
menuNo">
        <div class="
no" show="sinCodigo">1.- MANDAR EMAILS</div>
        <div class="
no" show="sinCodigo">2.- ESCRIBIR EN UN ARCHIVO DE TEXTO, O LEERLO</div>
        <div class="
no" show="sinCodigo">3.- TRABAJAR CON UNA BASE DE DATOS</div>
        <div class="
no" show="sinCodigo">4.- SUBIR ARCHIVOS AL SERVIDOR</div>
        <div class="
no" show="sinCodigo">5.- OBTENER LA HORA / VARIABLES DEL SERVIDOR</div>
        <div class="
no" show="sinCodigo">6.- OCULTAR TU CÓDIGO</div>
        <div class="
no" show="sinCodigo">7.- ENCUESTAS / CONTADORES DE VISITAS / SISTEMAS USUARIO CONTRASEÑAS</div>
        <div class="
no" show="sinCodigo">8.- MANEJAR PÁGINAS WEB AJENAS (ENVIAR FORMULARIOS AJENOS, SCROLL, CAMBIAR CONTENIDO...)</div>
        <div class="
no" show="sinCodigo">9.- MANEJAR EL SISTEMA OPERATIVO (CAMBIAR LAS VENTANAS DE DIÁLOGO ALERT() O CONFIRM(), ELIMINAR CONFIRMACIONES DE IMPRIMIR O GUARDAR, ELIMINAR BARRA DE TÍTULO DEL NAVEGADOR, ABRIR UN MENÚ, AÑADIR A FAVORITOS SIN CONFIRMACIÓN... GENERALMENTE TODOS LOS "ABUSOS" AL USUARIO)</div>
    </div>

    <div id="
sinCodigo">
        Lo siento, estamos en fase de desarrollo, todavía no tenemos el código de esta sección.
    </div>

</div> 
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #5 (permalink)  
Antiguo 04/06/2007, 06:28
Avatar de derkenuke
Colaborador
 
Fecha de Ingreso: octubre-2003
Ubicación: self.location.href
Mensajes: 2.665
Antigüedad: 20 años, 6 meses
Puntos: 45
Re: Un FAQ guiado para novatos en JavaScript

Código PHP:

<script>



function 
e(q,noBr) {
    
document.body.appendChilddocument.createTextNode(q) );
    if(!
noBrdocument.body.appendChilddocument.createElement("BR") );
}


var 
cuerpo=document.getElementById("cuerpo");

function 
getSoloDivs(padre) {
    var 
hijos=padre.childNodes;
    for(var 
i=0dev=[]; i<hijos.lengthi++)
        if( 
hijos[i].nodeType==&& hijos[i].tagName.toUpperCase()=="DIV" )
            
dev[dev.length]=hijos[i];
    return 
dev;
}

// capturamos todos los menus (hijos DIV de cuerpo) y los eliminamos del body
var CUERPO_DIVS=getSoloDivs(cuerpo);
for(var 
i=0DIVS=[]; i<CUERPO_DIVS.lengthi++) {
    
DIVSCUERPO_DIVS[i].id ] = CUERPO_DIVS[i];    // almaceno
    
cuerpo.removeChildCUERPO_DIVS[i] );    // elimino

    // EVENTOS PARA CADA DIV EN EL ARRAY DIVS, siempre que no sean de tipo código (no habrá excepto cancelar burbujeo en el onclick)
    
if( /codigo/i.test(CUERPO_DIVS[i].id) ) {
        
DIVSCUERPO_DIVS[i].id ].onclick=function(evento) {
            
//no queremos que se propague a la capa padre el evento
            //si no no podríamos seleccionar ni copiar ni nada
            
if(window.eventwindow.event.cancelBubble true;                
            else 
evento.stopPropagation();
        }
    }
    else {
        var 
cadaDiv=getSoloDivsDIVS[CUERPO_DIVS[i].id] );
        for(var 
j=0j<cadaDiv.lengthj++) {
            
cadaDiv[j].onmouseover=function() {
                
this.className="hover";
            }
            
cadaDiv[j].onmouseout=function() {
                
this.className="";
            }
            
cadaDiv[j].onclick=function(evento) {
                var 
estoyExpandido=false;
                
//quitamos todo lo que hayamos adjuntado en los demas div de la misma categoria
                
var cadaDiv=getSoloDivs(this.parentNode);
                for(var 
k=0k<cadaDiv.lengthk++) {
                    var 
cadaDiv_DIVS=getSoloDivs(cadaDiv[k]);
                    if( 
cadaDiv_DIVS.length>)    {    //hay submenu en algun cadaDiv
                        
if( cadaDiv[k] == this )        //yo tengo submenu, pero me lo oculto también
                            
estoyExpandido=true;
                        
cadaDiv[k].removeChild(cadaDiv_DIVS[0]);
                    }
                }
                if(!
estoyExpandido)    {    //adjuntamos aqui lo que ponga en el atributo show
                    
if( this.getAttribute("show") == null )
                        
this.setAttribute("show""menuAcciones");
                    
this.appendChildDIVSthis.getAttribute("show") ] );
                }
                if(
window.eventwindow.event.cancelBubble true;                //no queremos que se propague a la capa padre el evento
                
else evento.stopPropagation();
            }
        }
    }
}


//mostramos el menú inicial
cuerpo.appendChildDIVS["menuInicial"] );





//                AL CERRAR!!
// ningun DIV puede contener otro DIV con mas DIVs dentro = ningun DIV puede contener un menu dentro
// tampoco pueden contener ningun codigo



e("FIN DE CARGA SIN ERRORES");



</script>

</body>
</html> 

El resultado es bastante vistoso, y puede llegar a ser una buena manera de ir aprendiendo ejemplos básicos en javascript.


Seguiré desarrollando.
Byes.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 2 personas




La zona horaria es GMT -6. Ahora son las 22:59.