Javascript / DOM, analizando la cadena de clave / valor

Envío una cadena desde un servidor al navegador Firefox en el siguiente formato:

"KEY:a1 VAL:123.45"

Y esta cadena puede contener muchos registros de este tipo.

Aquí está el código que he escrito:

    var e;
    var reply = request.responseText;
    var txt = "", tab, key = "", val = "";
    var x = reply.getElementsByTagName("KEY:");
    for(i = 0; i < x.length; i++)
    {
        txt = x[i].childNodes[0].nodeValue; // "KEY:%c%c VAL:%.2F"
        tab = txt.split(":");
        key = "table_" + tab[1].substring(0,1);
        val = tab[2];
        e = document.getElementById(key);
        e.innerHTML = val;
        e.style.display = "block";
    }

val "KEY:a1 VAL:123.45" en lugar de lo esperado "123.45" (y por supuesto el key variable también es incorrecta, no coincide con una celda de la tabla, simplemente elige la primera en la tabla).

Ni siquiera sé cómo mostrar el key y val valores (document.write() y alert() no hacen nada y no veo cómo rastrear este código en Firefox).

Cualquier idea, consejo, corrección o ejemplo de código es bienvenido, pero no recomiendo usar ninguna biblioteca, quiero hacerlo con poco código.

EDITAR: de los dos comentarios, entiendo que hay dos formas distintas de proceder: ya sea usando objetos DOM y etiquetas HTML, o usando 'cadenas'. Preferiría seguir usando el formato anterior, así que guíeme a una solución de 'cadena'. ¡Gracias!

preguntado el 09 de marzo de 12 a las 17:03

CLAVE: no es un nombre de etiqueta y la respuesta no es un objeto -

reply no es un elemento DOM, es una cadena. Las cadenas no tienen un método aa getElementsByTagName y esa cadena ni siquiera contiene HTML. -

Gracias por la información. ¿Puedes explicar cómo debo hacerlo entonces? (ya sea creando 'objetos' y usando etiquetas HTML, o analizando una 'cadena', esta última a mi favor) -

Gracias por la información. ¿Puedes explicar cómo debo hacerlo entonces? (ya sea creando 'objetos' y usando etiquetas HTML, o analizando una 'cadena', esta última a mi favor) -

1 Respuestas

Puede usar una expresión regular simple para extraer la información de la cadena:

var value = "KEY:a1 VAL:123.45"​,
    pattern = /KEY:(\S+) VAL:(.+)$/g;

var result = pattern.exec(value);
// result[1] == 'a1'
// result[2] == '123.45'

En tu caso, usarías request.responseText en lugar de value.

respondido 09 mar '12, 18:03

No olvides aceptar la respuesta que más te ayudó ;) - Félix Kling

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.