Noticias Weblogs Foros Wiki Código

Meta-Info

¿Que es?

Planeta Código es un agregador de weblogs sobre programación y desarrollo en castellano. Si eres lector te permite seguirlos de modo cómodo en esta misma página o mediante el fichero de subscripción.

rss subscripción

Sponsors

Puedes utilizar las siguientes imagenes para enlazar PlanetaCodigo:
planetacodigo

planetacodigo

Si tienes un weblog de programación y quieres ser añadido aquí, envíame un email solicitándolo.

Idea: Juanjo Navarro

Diseño: Albin

xperiments.es

Inyectando xml con formato dentro de javascript

Enero 26th, 2011 - [Enlace local]

A veces estaria bien poder definir un xml en javascript de la siguiente manera:

1
2
3
4
var html =
<form>
    <input type="text">
form>;

Hasta que javascript soporte E4X en todos los navegadores, esto no va a ser podible…

Mientras llega E4X podemos simularlo utilizando los comentarios de javascript, para alli almacenar nuestras variables de una manera legible…

Definiriamos variables de la siguiente manera:

1
2
3
4
5
6
7
    /*!
    {"embed":{ "id":"form" } }
   

       
       
   

    */

La primera linea tiene que se un comienzo de comentario javascript /* , pero atencion con el simbolo ! justo detras, por lo que quedaria en /*!. Esto lo utilizamos para que algunos minimizadores de codigo no borren estos comentarios.
En la segunda linea es donde le especificamos al parser la variable que estamos definiendo, usando la propiedad id del objecto JSON descrito.
La ultimi linea tiene que ser un cierre de comentario */ en linea nueva…

Ejemplo completo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
var data = function()
{
    /*!
    {"embed":{ "id":"form" } }
   

       
       
   

    */


    /*!
    {"embed":{ "id":"button"} }
       

Libreria de parseo:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
(function(window)
{
    window.parseEmbeds = function( fn, opt )
    {  
        var dataObj = {}
        var regex_comments = /\*(.|[\r\n])*?\*/gi;
        var code = fn.toString().match( regex_comments );
        var comment;
        var lines;
        var outputString;
        var trim11 =function(str){str = str.replace(/^\s+/, '');for (var i = str.length - 1; i >= 0; i--) {if (/\S/.test(str.charAt(i))) {str = str.substring(0, i + 1);break;}}return str;};
        for( var i=0; i<code.length; i++ )
        {  
            comment = code[ i ];
            if( comment.indexOf('{"embed":')!=-1 )
            {
                lines = comment.split('\n');
                outputString = "";
                for( var e=2; e
    <lines.length-1; e++ )
                {
                   outputString+=trim11(lines[e]);
                }
                dataObj[ JSON.parse( lines[ 1 ] ).embed.id ] = outputString;
            }
        }
        return dataObj;
    }
})(window);

» Leer más, comentarios, etc...

Información legal y técnica