Foros del Web » Programando para Internet » Javascript »

contenido de una etiqueta

Estas en el tema de contenido de una etiqueta en el foro de Javascript en Foros del Web. Parecerá una tonteria, pero por mas que busco no he podido encontrar cómo sacar el contenido de una etiqueta html. Creo que lo he probado ...
  #1 (permalink)  
Antiguo 01/03/2004, 08:16
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
contenido de una etiqueta

Parecerá una tonteria, pero por mas que busco no he podido encontrar cómo sacar el contenido de una etiqueta html. Creo que lo he probado todo . Tengo un archivo asi:


Código PHP:

<contenido id="IDunico">
<
titulo>El titulo principal</titulo>
<
subtitulo>Subtitulo pequeño debajo de titulo</subtitulo>
<
desarrollo>
<
p>Esto es todo lo que contendria el articulo.
<
p>El texto del interior contiene parrafos, <a href="pagina">enlaces</ay saltos<br>de linea varios.
</
desarrollo>
</
contenido

Lo que intento es crear una funcion javascript que devuelva el articulo en un array pasandole el ID por argumento, es decir:

Código PHP:

function getArticulo(id) {
  
art=document.getElementById(id);
  
tit=....;              //deberia contener "El titulo principal"
  
subtit=....;        //deberia contener "Subtitulo pequeño debajo de titulo"
  
desa=....;         //deberia contener todo esto:
/*
<p>Esto es todo lo que contendria el articulo.
<p>El texto del interior contiene parrafos, <a href="pagina">enlaces</a> y saltos<br>de linea varios.
*/
  
return [tit,subtit,desa];

He probado con muchas cosas, por favor, un cable con el DOM, que estoy muy frio.


Saludos
__________________
- 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 01/03/2004, 08:42
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola derkenuke:

No sé si has visto el inspector DOM que propuse en un viejo mensaje (que no pude encontrarlo). Este es el enlace: http://www.pepemolina.com/DOM/index.html

Básicamente cuelga de un nodo (etiqueta) otros nodos etiquetas y nodos de texto (hay otros como comentarios...)
Cuando tienes el id y obtienes el objeto con document.getElementById("¿?") puedes consultar el array de objetos que cuelga con childNodes, y por cada uno de esos nodos hijos (se indexa como cualquier array) puedes consultar su tagName, o cualquiera de sus atributos, pero a veces (según el navegador) se generan nodos vacíos de texto con espacios en blanco o saltos de línea...
Otra forma un poco más simplificada es buscar en el array de tagName que cuelgan de ese nodo, y para obtener su contenido puedes consultar el "innerHTML" que aunque creo que no es estandar (especificaciones w3.org) los navegadores lo admiten.

Saludos
  #3 (permalink)  
Antiguo 01/03/2004, 09: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
Si, buscaba algo asi para aclararme... Pero mi problema persiste..

Por ejemplo si hago:

function getArticulo(id) {
elArticulo=document.getElementById(id);
tieneHijos=elArticulo.hasChildNodes();
return tieneHijos;
}

alert(getArticulo("IDunico"));


Me alerta false (ejemplo anterior), y me he cercionado de que la variable elArticulo haga referencia a la etiqueta <contenido>, pero es que si tiene hijos, ¿no deberia devolver un array con los nodos titulo, subtitulo y desarrollo?

Gracias por responder.
__________________
- 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 01/03/2004, 16:43
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

La teoría parece estar bien, ¿Tienes algún enlace para verlo?
Si usas un tag con un nombre inventado en explorer no va bien, o tendrías que hacerlo como página xml, con sus cabeceras, etc. La verdad es que no conozco bien ese tema.

Ya que has probado con hasChildNodes, también puedes probar con childNodes.length, que devolvería el nº de elementos del array de hijos.

Saludos
  #5 (permalink)  
Antiguo 02/03/2004, 04:52
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
Codigo completo

No tengo ningun enlace, estoy haciendo pruebas antes de colgarlo, pero el codigo completo es este:

Código PHP:
<contenido id="IDunico">
<
titulo>El titulo principal</titulo>
<
subtitulo>Subtitulo pequeño debajo de titulo</subtitulo>
<
desarrollo>
<
p>Esto es todo lo que contendria el articulo.
<
p>El texto del interior contiene parrafos, <a href="pagina">enlaces</ay saltos<br>de linea varios.
</
desarrollo>
</
contenido>

<
script language="javascript">
<!--
function 
getArticulo(id) {
    
elArticulo=document.getElementById(id);
    
tieneHijos=elArticulo.hasChildNodes();
    return 
tieneHijos;
}

alert(getArticulo("IDunico"));
//-->
</script> 

Utilizo IE, quiza sea por eso, puedo plantearme utilizar otras etiquetas cualesquiera, por ejemplo alguna rara como <title> para el titulo, <adress> para el subtitulo y <blockquote> para el desarrollo, el formato no me importa porque va a estar oculto. Sera muy chapucero, pero puede que funcione, porque con xml no tengo ni idea de como hacerlo.

PD: childNodes.length da 0, como es lógico para el resultado false de hasChildNodes().

__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #6 (permalink)  
Antiguo 02/03/2004, 06:21
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Creo que lo mejor es que pruebes con etiquetas normales, y en vez de title (que tiene un sentido pero en el head) pongas otra... tal vez h1..6 y dándole estilos de tamaño de fuente y formato como display: inline.

Yo también estoy haciendo algo así, pero tampoco lo he subido porque va con una base de datos (me imagino que lo tuyo también).

Para los elementos con formato, me parece que es mejor usar innerHTML.

Saludos
  #7 (permalink)  
Antiguo 02/03/2004, 06:50
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
Solucion

Aqui esta la solucion. He utilizado etiquetas que no utilizo por si acaso hay confusiones. Para un articulo mas o menos seria asi:

Código PHP:
<ruby id="IDunico">
<
big>El titulo principal</big>
<
acronym>Subtitulo pequeño debajo de titulo</acronym>
<
bdo>
<
p>Esto es todo lo que contendria el articulo.</p>
<
p>El texto del interior contiene parrafos, <a href="pagina">enlaces</ay saltos<br>de linea varios.</p>
</
bdo>
</
ruby

<
script language="javascript">
<!--
function 
getArticulo(id) {
    
elArticulo=document.getElementById(id);
    
hijos=elArticulo.childNodes;
    
devolver=new Array();
    for(
a=0;a<hijos.length;a++) {
        
etiq=hijos[a].tagName;
        if(
etiq=="BIG"devolver[0]=hijos[a].innerText;
        else if(
etiq=="ACRONYM"devolver[1]=hijos[a].innerText;
        else 
devolver[2]=hijos[a].innerHTML;
    }
    return 
devolver;
}

alert(getArticulo("IDunico").join("\r\r"));
//-->
</script> 
Esta todo como antes, salvo un bucle for que he hecho, porque no se porqué la variable hijos no guarda las referencias a las etiquetas en orden lógico, es decir, el elemento 0 hace referencia a <big>; pero el 1 -> undefined; el 2 -> <acronym>; 3 -> undefined y 4 -> <bdo>, no se si esto sera fijo o no, pero para que funcione siempre, un bucle con comprobaciones y listo.

Espero que a alguien le sirva.
__________________
- Haz preguntas inteligentes, y obtendrás más y mejores respuestas.
- Antes de postearlo Inténtalo y Búscalo.
- Escribe correctamente tus mensajes.
  #8 (permalink)  
Antiguo 02/03/2004, 07:25
Avatar de caricatos
Moderador
 
Fecha de Ingreso: abril-2002
Ubicación: Torremolinos (Málaga)
Mensajes: 19.607
Antigüedad: 22 años
Puntos: 1284
Hola otra vez:

Me alegro que al fin te valiera.
Hay otra cosa que tendrías que saber, y es que los saltos de línea o espacios en blanco pueden generar nodos de texto.
Para saber que tipo de nodo es puedes consultar nodeType y nodeName... el primero devuelve un cardinal que ahora mismo no recuerdo (hay para los tags, para los textos, los comentarios...).
Con nodeName devuelve, si se trata de una etiqueta, el nombre de la etiqueta (equivaldría a tagName), también puede devolver #text, #comment... Por la red hay información (lamento no tener los enlaces que miré yo)

Saludos
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




La zona horaria es GMT -6. Ahora son las 23:49.