jump to navigation

childNodes en Firefox Miércoles, 4 abril 2007

Posted by israelof in General.
trackback

Hace unos días publiqué un post en el que hacía referencia a los problemas que había tenido en la genaración de un XML desde PHP. Retomando un poco más el tema, vamos a ver el comportamiento que tiene Firefox al parsear una estructura XML (en nuestro caso un código HTML) cuando utilizamos childNodes, para obtener los nodos contenidos dentro de un nodo padre.

Para entenderlo partiremos del siguiente código HTML:


<div id=”nodo_padre”>
   <div id=”nodo_hijo_1″></div>
   <div id=”nodo_hijo_2″></div>
</div>

Si a continuación ejecutamos el código javascript:


<script>
 var array_nodos = document.getElementById(‘nodo_padre’).childNodes;
 alert(array_nodos.length);
</script>

En la ventana de alerta usando Firefox obtendremos un valor de 5, mientras que en Internet Explorer nos dará 2. Esto se debe a que Firefox interpreta los retornos de carro (\n) como nodos de texto.

Si lo que queremos es recorrer el array de nodos saltándonos los retornos de carro, deberemos realizar algo como lo siguiente:


<script>
  var array_nodos = document.getElementById(‘nodo_padre’).childNodes;
  for (var i=0; i<array_nodos.length; i++) {
     if(array_nodos[i].nodeType == 1) {
        hacer_algo(array_nodos[i]);
     }
  }
</script>

De este modo saltaremos todos los nodos que no sean del tipo elemento.

Anuncios

Comentarios»

1. Lenin - Jueves, 27 marzo 2008

Hola Israelof:

Fíjate que tengo un problema algo parecido, pero al revés; tengo 2 combos y de la elección del primero (dependencias), mediante AJAX hago una consulta a una BD y formo un XML con las Unidades de la dependencia y su identificador:
——–
$xml = “”;
$xml .= ”;
while($res=$consulta->fila()) {
$xml .= “”;
$xml .= “”;
$xml .= “”;
}
$xml .= ”;
header(‘Content-type: text/xml’);
echo $xml;
—————-
Funciona perfecto en Firefox, pero en IE no trae nada, el siguiente es el código del AJAX
—————
function carga(depen){
var ajax = ajaxobj();
ajax.open(‘POST’, ‘unidades.php’, true);
ajax.onreadystatechange=function() {
if (ajax.readyState==4) {
var datos = (ajax.responseXML).firstChild;
var obj = document.getElementById(‘cbUnidad’);
var k = obj.options.length;
for (var j=0; j<k; j++) {
obj.removeChild(obj.firstChild);
}
for (var i=0; i<datos.childNodes.length; i++) {
obj = document.createElement(‘option’);
obj.setAttribute(‘value’,datos.childNodes[i].getAttribute(‘idUnid’));
desc = document.createTextNode(datos.childNodes[i].childNodes[0].getAttribute(‘nombre’));
obj.appendChild(desc);
document.getElementById(‘cbUnidad’).appendChild(obj);
}
}
}
ajax.setRequestHeader(‘Content-Type’,’application/x-www-form-urlencoded’);
ajax.send(“&depen=”+depen);
}
———
Ojala y puedan ayudarme

2. mobile advertising service - Martes, 3 junio 2014

Great web site you have got here.. It’s difficult to find excellent writing like yours
these days. I really appreciate individuals like you!
Take care!!


Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: