<?xml version="1.0" encoding="UTF-8"?> <rss
version="2.0"
xmlns:content="http://purl.org/rss/1.0/modules/content/"
xmlns:wfw="http://wellformedweb.org/CommentAPI/"
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:atom="http://www.w3.org/2005/Atom"
xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
> <channel><title>Jorge Iván Meza Martínez &#187; HTML</title> <atom:link href="http://blog.jorgeivanmeza.com/tag/html/feed/" rel="self" type="application/rss+xml" /><link>http://blog.jorgeivanmeza.com</link> <description>The Fire Within Me: &#34;knowledge will set you free&#34;</description> <lastBuildDate>Tue, 31 Jan 2012 18:18:13 +0000</lastBuildDate> <language>en</language> <sy:updatePeriod>hourly</sy:updatePeriod> <sy:updateFrequency>1</sy:updateFrequency> <item><title>Georreferenciar inversamente con el API v3 de Google Maps utilizando Javascript</title><link>http://blog.jorgeivanmeza.com/2010/10/georreferenciar-inversamente-con-el-api-v3-de-google-maps-utilizando-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=georreferenciar-inversamente-con-el-api-v3-de-google-maps-utilizando-javascript</link> <comments>http://blog.jorgeivanmeza.com/2010/10/georreferenciar-inversamente-con-el-api-v3-de-google-maps-utilizando-javascript/#comments</comments> <pubDate>Wed, 27 Oct 2010 01:54:58 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Software geográfico]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[georreferenciación]]></category> <category><![CDATA[Google Maps]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=10861</guid> <description><![CDATA[Introducción. La georreferenciación inversa es el proceso contrario al descrito anteriormente, corresponde al obtener el nombre de una ubicación (topónimo) a partir de su ubicación geográfica, en términos de latitud y longitud. La aplicación de demostración. En el ejemplo equivale &#8230; <a
href="http://blog.jorgeivanmeza.com/2010/10/georreferenciar-inversamente-con-el-api-v3-de-google-maps-utilizando-javascript/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p>La georreferenciación inversa es el proceso contrario al descrito anteriormente, corresponde al obtener el nombre de una ubicación (topónimo) a partir de su ubicación geográfica, en términos de latitud y longitud.</p><h2>La aplicación de demostración.</h2><div
id="attachment_10862" class="wp-caption aligncenter" style="width: 983px"><a
href="http://demo.jorgeivanmeza.com/GMaps/GeocodeAPI3Demo/0.1/reverse.html"><img
class="size-full wp-image-10862" title="Selection_002" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/10/Selection_002.png" alt="Aplicación de demostración para la georreferenciación inversa con el API 3 de Google Maps" width="973" height="641" /></a><p
class="wp-caption-text">Aplicación de demostración para la georreferenciación inversa con el API 3 de Google Maps</p></div><p>En el ejemplo equivale a conocer la ubicación del sitio: <span
style="font-family: 'courier new', courier;">latitud = 5.073375</span> y <span
style="font-family: 'courier new', courier;">longitud = -75.495155</span>, y con esta información determinar que los siguientes sitios corresponden con esa posición.</p><ul><li>Carrera 12, Manizales, Caldas, Colombia.</li><li>Manizales, Caldas, Colombia.</li><li>Caldas, Colombia.</li><li>Colombia.</li></ul><h2>La implementación.</h2><p>Su implementación es una versión ligeramente mas simple que la <a
href="http://blog.jorgeivanmeza.com/2010/10/georreferenciar-con-el-api-v3-de-google-maps-utilizando-javascript/" target="_blank">georreferenciación directa</a>.</p><p>A continuación se detallan a nivel general las variaciones de esta modalidad de georreferenciación con respecto a la expuesta en un artículo anterior.</p><h3>Del lado de Javascript.</h3><p>Se asocia el evento de clic sobre el mapa con la función que realizará la georreferenciación inversa (<span
style="font-family: 'courier new', courier;">processReverseGeocoding</span>).</p><pre class="javascript">google.maps.event.addListener(map, 'click', function(event) {
    processReverseGeocoding(event.latLng, showMarkerInfo);
});</pre><p>En esta función se realiza el proceso de georreferenciación inversa el cual, al igual que su contraparte directa, es asíncrono y por este motivo se utiliza la misma estrategia del <em>callback</em>.</p><pre class="javascript">var request = {
    latLng: location
}
geocoder.geocode(request, function(results, status) {
    // ...
});</pre><p>La función <span
style="font-family: 'courier new', courier;">showMarkerInfo</span> es ejecutada cuando se finaliza la georreferenciación inversa y esta ha obtenido resultados válidos.  Su misión es la mostrar la información resultante en el mapa.</p><pre class="javascript">    function showMarkerInfo(locations)
    {
        // Centra el mapa en la ubicación especificada
        map.setCenter(locations[0].geometry.location);
        // Crea el mensaje para mostrar la información georreferenciada
        var infoWindow = new google.maps.InfoWindow();
        infoWindow.setPosition(locations[0].geometry.location);
        // Prepara el mensaje con la información obtenida del proceso
        // de georreferenciación inversa
        var content = 'Latitud:  ' + locations[0].geometry.location.lat() + '&lt;br /&gt;' +
                      'Longitud:  ' + locations[0].geometry.location.lng() + '&lt;br /&gt;' +
                      '&lt;br /&gt;Topónimos:&lt;br /&gt;&lt;ul&gt;';
        for (var i=0; i&lt;locations.length; i++)
        {
            if (locations[i].formatted_address)
                content += '&lt;li&gt;' + locations[i].formatted_address + '&lt;/li&gt;';
            else
                content += '&lt;li&gt;No se encontró información.&lt;/li&gt;';
        }
        content += "&lt;/ul&gt;";
        infoWindow.setContent(content);
        // Muestra el mensaje sobre el mapa
        infoWindow.open(map);
    }</pre><h2>Enlaces.</h2><ul><li>Aplicación de demostración del API v3 de georreferenciación inversa de Google Maps 0.1.<br
/> <a
href="http://demo.jorgeivanmeza.com/GMaps/GeocodeAPI3Demo/0.1/reverse.html" target="_blank">http://demo.jorgeivanmeza.com/GMaps/GeocodeAPI3Demo/0.1/reverse.html</a></li><li>The Google Geocoding API.<br
/> <a
href="http://code.google.com/apis/maps/documentation/geocoding/index.html" target="_blank">http://code.google.com/apis/maps/documentation/geocoding/index.html</a></li><li>Geocoding service.<br
/> <a
href="http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding" target="_blank">http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding</a></li></ul><div
id="gdsr_thumb_10843_a_up"><a
id="gdsrX10843XupXaX31X32XY" rel="nofollow"></a></div><div
id="gdsr_thumb_10843_a_dw"><a
id="gdsrX10843XdwXaX31X32XY" rel="nofollow"></a></div> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2010/10/georreferenciar-inversamente-con-el-api-v3-de-google-maps-utilizando-javascript/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Georreferenciar con el API v3 de Google Maps utilizando Javascript</title><link>http://blog.jorgeivanmeza.com/2010/10/georreferenciar-con-el-api-v3-de-google-maps-utilizando-javascript/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=georreferenciar-con-el-api-v3-de-google-maps-utilizando-javascript</link> <comments>http://blog.jorgeivanmeza.com/2010/10/georreferenciar-con-el-api-v3-de-google-maps-utilizando-javascript/#comments</comments> <pubDate>Wed, 27 Oct 2010 00:02:37 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Software geográfico]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[georreferenciación]]></category> <category><![CDATA[Google Maps]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=10843</guid> <description><![CDATA[Introducción. La georreferenciación es el proceso de determinar la ubicación (latitud, longitud) de una ubicación en la tierra según su nombre (topónimo). Si estoy en Manizales, Caldas, Colombia estaré realmente en latitud 5.07, longitud -75.52056. Existen varias formas de realizar este proceso &#8230; <a
href="http://blog.jorgeivanmeza.com/2010/10/georreferenciar-con-el-api-v3-de-google-maps-utilizando-javascript/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<h2>Introducción.</h2><p>La georreferenciación es el proceso de determinar la ubicación (latitud, longitud) de una ubicación en la tierra según su nombre (topónimo).</p><p
style="padding-left: 30px;">Si estoy en <strong>Manizales, Caldas, Colombia</strong> estaré realmente en <a
href="http://maps.google.com/maps/api/staticmap?&amp;amp;zoom=7&amp;amp;size=300x450&amp;amp;sensor=false&amp;amp;markers=color:blue|label:X|5.07,-75.52056" target="_blank"><strong>latitud 5.07, longitud -75.52056</strong></a>.</p><p>Existen varias formas de realizar este proceso dependiendo de los lenguajes de programación, interfaces y fuentes de información utilizados.  Anteriormente expliqué como hacerlo <a
href="http://blog.jorgeivanmeza.com/2010/10/georreferenciando-de-manera-facil-y-simple-con-geonames-utilizando-cmono/" target="_blank">utilizando C#/Mono y el servicio web de Geonames</a>, en este caso voy a utilizar el API Javascript versión 3 de Google Maps.</p><h2>La aplicación de demostración.</h2><div
id="attachment_10844" class="wp-caption aligncenter" style="width: 775px"><a
href="http://demo.jorgeivanmeza.com/GMaps/GeocodeAPI3Demo/0.1/demo.html"><img
class="size-full wp-image-10844 " title="Selection_001" src="http://blog.jorgeivanmeza.com/wp-content/uploads/2010/10/Selection_0012.png" alt="Aplicación de demostración para la georreferenciación con el API 3 de Google Maps" width="765" height="579" /></a><p
class="wp-caption-text">Aplicación de demostración para la georreferenciación con el API 3 de Google Maps</p></div><p>Como se mencionó anteriormente, la funcionalidad es precisa: convertir el nombre de una ubicación en su correspondiente localización en términos de latitud y longitud, y mostrarla en el mapa.</p><h2>La implementación.</h2><h3>Del lado de Javascript.</h3><p>Incluír la referencia al API de Google Maps.</p><pre class="javascript">&lt;script type="text/javascript" src="http://maps.google.com/maps/api/js?sensor=false&amp;language=es"&gt;&lt;/script&gt;</pre><p>Instanciar el geocodificador.</p><pre class="javascript">var geocoder = new google.maps.Geocoder();</pre><p>Crear el mapa.</p><pre class="javascript">window.onload = function() {
    var options = {
        zoom: 5,
        center: new google.maps.LatLng(4, -72),
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    map = new google.maps.Map(document.getElementById('map'), options);
    // ...</pre><p>Establecer la funcionalidad del botón <strong>Buscar</strong>.</p><pre class="javascript">    document.getElementById('search').onclick = function() {
            // Obtiene la ubicación (string) a georreferenciar
            var location = document.getElementById('location').value;
            // Inicia el proceso de georreferenciación (asíncrono)
            processGeocoding(location, addMarkers);
            // Detiene el procesamiento del evento
            return false;
        }
    } // Fin del método window.onload</pre><p>El proceso de georreferenciación es asíncrono así que es necesario especificar una función (<em>callback</em>) para que se ejecute si la georreferenciación termina exitosamente.</p><p>El núcleo de la georreferenciación se realiza en la invocación al método <span
style="font-family: 'courier new', courier;">geocoder.geocode(opciones, implementacion)</span>.  Es necesario determinar el estado final (<span
style="font-family: 'courier new', courier;">status</span>) después de la ejecución asíncrona para determinar que acción puede realizarse con los datos resultantes.</p><pre class="javascript">    function processGeocoding(location, callback)
    {
        // Propiedades de la georreferenciación
        var request = {
            address: location
        }
        // Invocación a la georreferenciación (proceso asíncrono)
        geocoder.geocode(request, function(results, status) {
            /*
             * OK
             * ZERO_RESULTS
             * OVER_QUERY_LIMIT
             * REQUEST_DENIED
             * INVALID_REQUEST
             */
            // Notifica al usuario el resultado obtenido
            document.getElementById('message').innerHTML = "Respuesta obtenida: " + status;
            // En caso de terminarse exitosamente el proyecto ...
            if(status == google.maps.GeocoderStatus.OK)
            {
                // Invoca la función de callback
                callback (results);
                // Retorna los resultados obtenidos
                return results;
            }
            // En caso de error retorna el estado
            return status;
        });
    }</pre><p>La función enviada como <em>callback</em> (<span
style="font-family: 'courier new', courier;">addMarkers</span>) es la responsable de tomar las ubicaciones retornadas por la georreferenciación, crearles marcadores, ventanas de información, asociarlas al evento de clic y mostrarlas en el mapa.</p><pre class="javascript">   function addMarkers(geocodes)
    {
        for(i=0; i&lt;geocodes.length; i++)
        {
            // Centra el mapa en la nueva ubicación
            map.setCenter(geocodes[i].geometry.location);
            // Valores iniciales del marcador
            var marker = new google.maps.Marker({
                map: map,
                title: geocodes[i].formatted_address
            });
            // Establece la ubicación del marcador
            marker.setPosition(geocodes[i].geometry.location);
            // Establece el contenido de la ventana de información
            var infoWindow = new google.maps.InfoWindow();
            content = "Ubicación: " + geocodes[i].formatted_address + "&lt;br /&gt;" +
                      "Tipo: " + geocodes[i].types + "&lt;br /&gt;" +
                      "Latitud: " + geocodes[i].geometry.location.lat() + "&lt;br /&gt;" +
                      "Longitud: " + geocodes[i].geometry.location.lng();
            infoWindow.setContent(content);
            // Asocia el evento de clic sobre el marcador con el despliegue
            // de la ventana de información
            google.maps.event.addListener(marker, 'click', function(event) {
                infoWindow.open(map, marker);
            });
        }
    }</pre><h3>Del lado de HTML.</h3><p>Se implementa una estructura muy simple para desplegar la información.  Una primera parte permite desplegar el mensaje de información acerca del estado del proceso y le permite al usuario ingresar el nombre de la ubicación a georreferenciar.</p><pre class="html">    &lt;!-- Mensaje de estado --&gt;
    &lt;div id="message"&gt;&lt;/div&gt;
    &lt;!-- Ubicación a georreferenciarse --&gt;
    &lt;label for="location"&gt;Ubicación:&lt;/label&gt;
    &lt;input type="text" id="location" name="location" value="" size="40" /&gt;
    &lt;!-- Botón para inciar la georreferenciación --&gt;
    &lt;input type="button" id="search" name="search" value="Buscar" /&gt;</pre><p>Una segunda parte establece la ubicación para desplegar el mapa.</p><pre class="html">&lt;!-- Lugar de despliegue del mapa --&gt;
&lt;div id="map"&gt;&lt;/div&gt;</pre><h2>Enlaces.</h2><ul><li>Aplicación de demostración del API v3 de georreferenciación de Google Maps 0.1.<br
/> <a
href="http://demo.jorgeivanmeza.com/GMaps/GeocodeAPI3Demo/0.1/demo.html">http://demo.jorgeivanmeza.com/GMaps/GeocodeAPI3Demo/0.1/demo.html</a></li><li>The Google Geocoding API.<br
/> <a
href="http://code.google.com/apis/maps/documentation/geocoding/index.html" target="_blank">http://code.google.com/apis/maps/documentation/geocoding/index.html</a></li><li> Geocoding service.<br
/> <a
href="http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding" target="_blank">http://code.google.com/apis/maps/documentation/javascript/services.html#Geocoding</a></li></ul> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2010/10/georreferenciar-con-el-api-v3-de-google-maps-utilizando-javascript/feed/</wfw:commentRss> <slash:comments>3</slash:comments> </item> <item><title>Plantillas para documentos XHTML y otros recursos web</title><link>http://blog.jorgeivanmeza.com/2009/06/plantillas-para-documentos-xhtml-y-otros-recursos-web/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=plantillas-para-documentos-xhtml-y-otros-recursos-web</link> <comments>http://blog.jorgeivanmeza.com/2009/06/plantillas-para-documentos-xhtml-y-otros-recursos-web/#comments</comments> <pubDate>Mon, 29 Jun 2009 05:43:20 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Hipergalaxia]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[XHTML]]></category> <guid
isPermaLink="false">http://blog.jorgeivanmeza.com/?p=1827</guid> <description><![CDATA[En el sitio de WebStandards se puede encontrar un listado con las plantillas base para los documentos XHTML 1.0/1.1 y HTML4. XHTML 1.0 / 1.1 Transitional document. Strict document. Frameset. Document 1.1. HTML 4.01 Transitional document. Strict document. Frameset. Además &#8230; <a
href="http://blog.jorgeivanmeza.com/2009/06/plantillas-para-documentos-xhtml-y-otros-recursos-web/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>En el sitio de <a
href="http://www.webstandards.org/learn/reference/templates/" target="_blank">WebStandards</a> se puede encontrar un <a
href="http://www.webstandards.org/learn/reference/templates/" target="_blank">listado con las plantillas base</a> para los documentos XHTML 1.0/1.1 y HTML4.</p><ul><li>XHTML 1.0 / 1.1<ul><li><a
href="http://www.webstandards.org/learn/reference/templates/xhtml10t/" target="_blank">Transitional document</a>.</li><li><a
href="http://www.webstandards.org/learn/reference/templates/xhtml10s/" target="_blank">Strict document</a>.</li><li><a
href="http://www.webstandards.org/learn/reference/templates/xhtml10f/" target="_blank">Frameset</a>.</li><li><a
href="http://www.webstandards.org/learn/reference/templates/xhtml11/" target="_blank">Document 1.1</a>.</li></ul></li><li>HTML 4.01<ul><li><a
href="http://www.webstandards.org/learn/reference/templates/html401t/" target="_blank">Transitional document</a>.</li><li><a
href="http://www.webstandards.org/learn/reference/templates/html401s/" target="_blank">Strict document</a>.</li><li><a
href="http://www.webstandards.org/learn/reference/templates/html401f/" target="_blank">Frameset</a>.</li></ul></li></ul><p>Además de estos documentos encontré otros recursos interesantes relacionados con el desarrollo web.</p><ul><li>Formularios X/HTML accesibles.<br
/> <a
href="http://www.webstandards.org/learn/tutorials/accessible-forms/" target="_blank">http://www.webstandards.org/learn/tutorials/accessible-forms/</a></li><li>Character Entity References.<br
/> <a
href="http://www.webstandards.org/learn/reference/charts/entities/" target="_blank">http://www.webstandards.org/learn/reference/charts/entities/</a></li><li>Colores válidos para HTML 4 y XHTML 1.0/1.1.<br
/> <a
href="http://www.webstandards.org/learn/reference/charts/color_names/" target="_blank">http://www.webstandards.org/learn/reference/charts/color_names/</a></li><li>DOCTYPEs y sus respectivos modos de diseño.<br
/> <a
href="http://www.webstandards.org/learn/reference/charts/doctype-switch/" target="_blank">http://www.webstandards.org/learn/reference/charts/doctype-switch/</a></li><li>HTML versus XHTML.<br
/> <a
href="http://www.webstandards.org/learn/articles/askw3c/oct2003/" target="_blank">http://www.webstandards.org/learn/articles/askw3c/oct2003/</a></li><li>Referencias de los lenguajes de marcas.<br
/> <a
href="http://www.webstandards.org/learn/external/html/" target="_blank">http://www.webstandards.org/learn/external/html/</a></li><li>Organizaciones relacionadas con los estándares.<br
/> <a
href="http://www.webstandards.org/learn/external/orgs/" target="_blank">http://www.webstandards.org/learn/external/orgs/</a></li></ul><div
id="_mcePaste" style="overflow: hidden; position: absolute; left: -10000px; top: 0px; width: 1px; height: 1px;"><p>http://www.webstandards.org/learn/tutorials/accessible-forms/</p></div> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2009/06/plantillas-para-documentos-xhtml-y-otros-recursos-web/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Jugando con InnerHTML (3)</title><link>http://blog.jorgeivanmeza.com/2007/12/jugando-con-innerhtml-3/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jugando-con-innerhtml-3</link> <comments>http://blog.jorgeivanmeza.com/2007/12/jugando-con-innerhtml-3/#comments</comments> <pubDate>Tue, 04 Dec 2007 14:45:09 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=152</guid> <description><![CDATA[Al ejemplo anterior de tablas dinámicas utilizando JavaScript que permitía agregar y eliminar filas dinámicamente del lado del cliente le hice algunas modificaciones que encontré necesarias cuando lo utilicé en un caso práctico. El ejemplo permite ahora agregar un documento &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/12/jugando-con-innerhtml-3/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Al <a
title="http://www.jorgeivanmeza.com/blog/?p=190" href="http://www.jorgeivanmeza.com/blog/?p=190" target="_blank">ejemplo anterior</a> de <em>tablas dinámicas</em> utilizando JavaScript que permitía agregar y eliminar filas dinámicamente del lado del cliente le hice algunas modificaciones que encontré necesarias cuando lo utilicé en un caso práctico.  El ejemplo permite ahora agregar un <strong>documento de identidad</strong> que actuará como <em>llave primaria</em> del registro.  El documento se muestra como texto estático y además se incluye como campo oculto (<em>hidden</em>) para que sea reconocido por la aplicación del lado del servidor.</p><p>Los demás campos son presentados en la tabla como campos editables (<em>input</em>) para permitir su modificación por parte del usuario hasta el momento de hacer el envío.</p><p>El ejemplo puede consultarse en el siguiente enlace: <a
title="Test InnerHTML 3" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/12/test_inner3.html">Test InnerHTML 3</a></p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/12/jugando-con-innerhtml-3/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Jugando con InnerHTML (2)</title><link>http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml-2/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jugando-con-innerhtml-2</link> <comments>http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml-2/#comments</comments> <pubDate>Wed, 31 Oct 2007 16:14:41 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=140</guid> <description><![CDATA[Bien, encontré una mejor forma de hacerlo &#8230; con DOM. Insertar una nueva fila en una tabla (destino) es fácil, sólo es establecer donde se quiere e insertarla. var nuevo_indice = destino.rows.length; fila = destino.insertRow(nuevo_indice); Después es necesario especificar el &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml-2/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Bien, encontré una mejor forma de hacerlo &#8230; con <a
title="DOM - Document Object Model" href="http://en.wikipedia.org/wiki/Document_Object_Model" target="_blank">DOM</a>.</p><p>Insertar una nueva fila en una tabla (<em>destino</em>) es fácil, sólo es establecer donde se quiere e insertarla.</p><p><code>var nuevo_indice = destino.rows.length;<br
/> fila = destino.insertRow(nuevo_indice);<br
/> </code></p><p>Después es necesario especificar el contenido de las celdas, para el ejemplo, un <em>checkbox </em>y dos valores de texto.</p><p><code>celda = fila.insertCell(0);<br
/> valor = document.createElement("input");<br
/> valor.type = "checkbox";<br
/> valor.id = "marca";<br
/> valor.name = "marca";<br
/> valor.value = nuevo_indice;<br
/> celda.appendChild(valor);</code></p><p><code>celda = fila.insertCell(1);<br
/> valor = document.createTextNode(nombres + " - " + nuevo_indice);<br
/> celda.appendChild(valor);</code></p><p><code>celda = fila.insertCell(2);<br
/> valor = document.createTextNode(apellidos);<br
/> celda.appendChild(valor);</code></p><p>Para remover las filas obtengo una referencia a los elementos que sean <em>input </em>y pertenezcan a la tabla.</p><p><code>var inputs = origen.getElementsByTagName("input");</code></p><p>Después filtro los que sean <em>checkbox </em>y sean los que me interesan (<em>id='marca'</em>).  Los almaceno en un arreglo.</p><p><code>for (i=0; i&lt;inputs.length; i++)<br
/> {<br
/> if (inputs[i].type == "checkbox" &amp;&amp;<br
/> inputs[i].id == "marca" &amp;&amp;<br
/> inputs[i].checked)<br
/> {<br
/> checkboxes[chk_cuenta] = inputs[i];<br
/> chk_cuenta ++;<br
/> }<br
/> }</code></p><p>Después de filtrados procedo a eliminarlos.</p><p><code>for (i=0; i&lt;checkboxes.length; i++)<br
/> {<br
/> origen.deleteRow(checkboxes[i].value - <strong>1*i</strong>);<br
/> }</code></p><p>En este punto encontré un <em>serio</em> problema.  El <em>value</em> de los <em>checkboxes</em> seleccionados me indica cuales son las filas que deseo remover, pero después de remover la primera de ellas la continuidad de las filas se altera ya que se eliminó un elemento.  Para compensar esto se disminuye <em>1*i </em>el índice de la fila, siendo 0 para el primer caso cuando no se ha alterado, 1 cuando se ha removido una fila y así sucesivamente.</p><p>La solución anterior soluciona el problema durante un procedimiento de eliminación de filas, sin embargo al terminar la tabla queda con sus índices alterados y por consiguiente va a fallar la siguiente eliminación y posiblemente la adición de filas también va a ser confusa.  Para esto tuve que corregir los índices de las filas tan pronto como se termina la remoción.</p><p><code>for (i=0; i&lt;inputs.length; i++)<br
/> {<br
/> if (inputs[i].type == "checkbox" &amp;&amp;<br
/> inputs[i].id == "marca")<br
/> {<br
/> inputs[i].value = i + 1;<br
/> }<br
/> }</code></p><p>El archivo fuente del ejemplo se puede descargar del siguiente enlace: <a
title="test_inner2.html" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_inner2.html">test_inner2.html</a></p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml-2/feed/</wfw:commentRss> <slash:comments>1</slash:comments> </item> <item><title>Jugando con InnerHTML</title><link>http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=jugando-con-innerhtml</link> <comments>http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml/#comments</comments> <pubDate>Tue, 30 Oct 2007 22:38:28 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[HTML]]></category> <category><![CDATA[JavaScript]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=137</guid> <description><![CDATA[Con este ejemplo muy sencillo es posible agregar filas de una tabla en el lado del cliente sin hacer un requerimiento al servidor y ahorrarse uno la consabida lentitud, útil en momentos de agregar items a una lista. Obviamente, a &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Con este ejemplo muy sencillo es posible agregar filas de una tabla en el lado del cliente sin hacer un requerimiento al servidor y ahorrarse uno la consabida lentitud, útil en momentos de agregar items a una lista.  Obviamente, a diferencia de Ajax, los elementos sólo viven en el lado del cliente hasta que se envían, en un sólo requerimiento, hacia el servidor donde son <code>almacenados en la base de datos.</code></p><p>La idea es crear una tabla (<code>info</code>) que va a contener los datos.</p><p><code>&lt;table id="info" name="info" class="tabla"&gt;<br
/> &lt;tr class="titulos"&gt;<br
/> &lt;td&gt;<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> Nombres<br
/> </code><code> </code><code> </code><code> &lt;/td&gt;<br
/> </code><code> </code><code> </code><code> &lt;td&gt;<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> Apellidos<br
/> </code><code> </code><code> </code><code> &lt;/td&gt;<br
/> &lt;/tr&gt;<br
/> &lt;/table&gt;</code></p><p>Un formulario desde el cual se agregarán nueva información.</p><p><code>&lt;form id="datos" name="datos" onsubmit="return agregar_fila(this)"&gt;<br
/> </code><code> </code><code> </code><code> Nombres:     &lt;input type="text" id="nombres" name="nombres" value="" size="25" /&gt;<br
/> </code><code> </code><code> </code><code> Apellidos: &lt;input type="text" id="apellidos" name="apellidos" value="" size="25" /&gt;</code><code> </code><br
/> <code> </code><code> </code></p><p><code> &lt;input type="submit" id="agregar" name="agregar" value="Agregar" /&gt;<br
/> &lt;/form&gt;</code></p><p>Y una función de JavaScript que agregará la nueva información (<code>nombres</code> y <code>apellidos</code>) a la tabla.</p><p><code>function agregar_fila(origen)<br
/> {<br
/> </code><code> </code><code> </code><code> nom = origen.nombres.value;<br
/> </code><code> </code><code> </code><code> apl = origen.apellidos.value;</code></p><p><code>document.getElementById("info").innerHTML += "&lt;tr class='fila'&gt;    \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> &lt;td&gt;              \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> " + nom + "   \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> &lt;/td&gt;             \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> &lt;td&gt;              \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> " + apl + "   \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> &lt;/td&gt;             \<br
/> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> </code><code> &lt;/tr&gt;";</code></p><p><code>return false;<br
/> }</code></p><p>El archivo de ejemplo puede descargarse desde el siguiente enlace: <a
title="test_inner.html" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_inner.html">test_inner.html</a></p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/jugando-con-innerhtml/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Por fin un ejemplo de Box Model entendible (2da. parte)</title><link>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=por-fin-un-ejemplo-de-box-model-entendible-2da-parte</link> <comments>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/#comments</comments> <pubDate>Tue, 30 Oct 2007 16:22:21 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=134</guid> <description><![CDATA[Bueno, no me aguanté las ganas de seguir haciendo pruebas. Esta vez con Layout #13 de Layout Gala. El ejemplo anterior tomado de Matthew Levine estaba elegante pero no quiso funcionar en IE. Simplifiqué un poco el ejemplo y esto &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Bueno, no me aguanté las ganas de seguir haciendo pruebas.  Esta vez con <a
title="http://blog.html.it/layoutgala/LayoutGala13.html" href="http://blog.html.it/layoutgala/LayoutGala13.html" target="_blank">Layout #13</a> de Layout Gala.</p><p>El ejemplo anterior tomado  de Matthew Levine estaba elegante pero no quiso funcionar en IE.</p><p>Simplifiqué un poco el ejemplo y esto fue lo que obtuve.</p><p><a
title="test_div2a.gif" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div2a.gif"><img
src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div2a.gif" alt="test_div2a.gif" /></a></p><p>Me hace falta lograr que las columnas izquierda (azul) y derecha (rojo) ocupen tanto espacio como ocupe la columna central (salmón), sin embargo si utilizo <code>height: 100%</code> intentan tomar el alto de la pantalla.</p><p>Por ahora este es un gran paso para -mi- humanidad en la lucha contra las cajas.</p><p>El archivo de prueba puede descargarse del siguiente enlace: <a
title="test_div2a.html" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div2a.html">test_div2a.html</a>.</p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible-2da-parte/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Por fin un ejemplo de Box Model entendible</title><link>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=por-fin-un-ejemplo-de-box-model-entendible</link> <comments>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/#comments</comments> <pubDate>Tue, 30 Oct 2007 14:37:58 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[CSS]]></category> <category><![CDATA[HTML]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=131</guid> <description><![CDATA[Hace hace muy poco no había querido trabajar con CSS. Siempre encontraba una rápida respuesta para mejor hacerlo de la manera convencional &#8230; es mas rápido, no tengo tantos problemas, no se complica tanto, etc. En el último par de &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Hace hace muy poco no había querido trabajar con CSS.  Siempre encontraba una rápida respuesta para mejor hacerlo de la manera convencional &#8230; es mas rápido, no tengo tantos problemas, no se complica tanto, etc.  En el último par de meses en los que he estado de <em>webmaster</em> adaptando la presentación de algunos portales a la provista por el publicista de la Fundación he aprendido algunas cositas y como todo lo que aprendo, me ha terminado gustando mucho.</p><p>Una de las cosas de las que en realidad no he logrado entender  completamente es el <em>box model</em> (modelo de cajas) de CSS.  Yo quiero hacer lo que la teoría sugiere: en el HTML dejar sólo el contenido y en CSS especificar como se va a presentar esa información.  Según esto, yo quiero que el <em>layout</em> (distribución) de mi página esté dada por el CSS con <em>DIVs </em>y no en el HTML con <em>TABLE</em>.  Pero ah que cosa mas extraña para mi.</p><p>Le he sacado tiempo en varias oportunidades pero no lo he logrado.  Lo mas cerca que he estado funcionaba perfecto en Firefox pero se corría inexplicablemente en IE &#8230; como siempre.</p><p>Hoy amanecí con ganas de volver a intentarlo y encontré un par de enlaces muy interesantes.  Entre ellos me gustó <a
href="http://www.alistapart.com/articles/holygrail">In Search of the Holy Grail</a> de <a
href="http://www.alistapart.com/authors/l/matthewlevine">Matthew Levine</a> quien se toma su tiempo para explicar la implementación de una página con tres columnas, dos de ellas de ancho fijo y el centro líquido (consume el tamaño complementario) y con una estructura de DIVs simple, tal y como yo la quería.<br
/> <code><br
/> &lt;div id="<strong>header</strong>"&gt;Este es el header&lt;/div&gt;<br
/> &lt;div id="<strong>container</strong>"&gt;</code><br
/> <code>&lt;div id="<strong>center</strong>" class="column"&gt;Este es el centro&lt;/div&gt;</code><br
/> <code>&lt;div id="<strong>left</strong>" class="column"&gt;Esta es la izquierda&lt;/div&gt;</code><br
/> <code>&lt;div id="<strong>right</strong>" class="column"&gt;Esta es la derecha&lt;/div&gt;</code><br
/> <code>&lt;/div&gt;<br
/> &lt;div id="<strong>footer</strong>"&gt;Estos son los pies&lt;/div&gt;</code></p><p>Este código HTML produce el siguiente resultado después de ser mezclado con el CSS correspondiente.</p><p><a
title="demo_css_div" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/demo_css_div.gif"><img
src="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/demo_css_div.gif" alt="demo_css_div" width="594" height="242" /></a></p><p>Como siempre &#8230; en Firefox funciona perfecto, lo acabo de probar en IE7 y se enloquece, a pesar de que el autor menciona que funciona en los principales navegadores.</p><p>El archivo de prueba que utilicé se puede descargar del siguiente enlace: <a
title="test_div.html" href="http://www.jorgeivanmeza.com/blog/wp-content/uploads/2007/10/test_div.html">test_div.html</a>.</p><p>Espero mas adelante tener un poco mas de tiempo y hacerlo funcionar ya que no quiero seguir haciendo páginas basadas en <em>TABLEs</em>.</p><p>Otro enlace relacionado con el tema que se ve prometedor es Layout Gala (<a
title="Layout Gala" href="http://blog.html.it/layoutgala/" target="_blank">http://blog.html.it/layoutgala/</a>) en el que se presentan varios diseños basados en columnas.</p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/por-fin-un-ejemplo-de-box-model-entendible/feed/</wfw:commentRss> <slash:comments>0</slash:comments> </item> <item><title>Problemas entre capas y objetos Flash en HTML</title><link>http://blog.jorgeivanmeza.com/2007/10/problemas-entre-capas-y-objetos-flash-en-html/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=problemas-entre-capas-y-objetos-flash-en-html</link> <comments>http://blog.jorgeivanmeza.com/2007/10/problemas-entre-capas-y-objetos-flash-en-html/#comments</comments> <pubDate>Fri, 19 Oct 2007 03:14:04 +0000</pubDate> <dc:creator>jimezam</dc:creator> <category><![CDATA[Desarrollo de software]]></category> <category><![CDATA[Web]]></category> <category><![CDATA[Flash]]></category> <category><![CDATA[HTML]]></category> <guid
isPermaLink="false">http://www.jorgeivanmeza.com/blog/?p=128</guid> <description><![CDATA[Tenía que publicar en uno de los portales un bloque con un logo hecho en Flash. La puesta fue muy fácil, el problema apareció cuando los menúes desplegables empezaron a aparecer por debajo del objeto Flash. Hice pruebas envolviendo el &#8230; <a
href="http://blog.jorgeivanmeza.com/2007/10/problemas-entre-capas-y-objetos-flash-en-html/">Continue reading <span
class="meta-nav">&#8594;</span></a>]]></description> <content:encoded><![CDATA[<p>Tenía que publicar en uno de los portales un bloque con un logo hecho en Flash.  La puesta fue muy fácil, el problema apareció cuando los menúes desplegables empezaron a  aparecer por debajo del objeto Flash.</p><p>Hice pruebas envolviendo el <em>object </em>en un <em>div</em> y modificando el <em>z-index</em>, pero nadita.</p><p>Los objetos Flash traen ahora una propiedad que se llama <em>wmode </em>a la cual si se le asigna el valor de <em>transparent </em>no solo hace el fondo del <em>SWF</em> transparente sino que hace que el objeto respete el índice de profundidad.</p><p>Hay que poner el valor sugerido como parámetro del <em>object</em> y dentro de la etiqueta <em>embed </em>para que funcione en los dos navegadores.</p><p>Ejemplo:<br
/> <code><br
/> &lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" codebase="http://download.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,29,0" width="185"<br
/> height="205"&gt;<br
/> <strong> </strong><span
style="text-decoration: underline;"><strong>&lt;param name="wmode" value="transparent"&gt;</strong></span><br
/> &lt;param name="movie" value="banner_iso9001_ntcgp1000.swf"&gt;<br
/> &lt;param name="quality" value="high"&gt;<br
/> &lt;embed src="banner_iso9001_ntcgp1000.swf" quality="high"<span
style="text-decoration: underline;"><strong> </strong><strong>wmode="transparent"<br
/> </strong></span> pluginspage="http://www.macromedia.com/shockwave/download/index.cgi?P1_Prod_Version=ShockwaveFlash"<br
/> type="application/x-shockwave-flash"<br
/> width="185"<br
/> height="205"&gt;&lt;/embed&gt;<br
/> &lt;/object&gt;</code></p> ]]></content:encoded> <wfw:commentRss>http://blog.jorgeivanmeza.com/2007/10/problemas-entre-capas-y-objetos-flash-en-html/feed/</wfw:commentRss> <slash:comments>2</slash:comments> </item> </channel> </rss>
