Seriación de HTML

Ahora vamos a volver la atención a serializar HTML correctamente en las modernas aplicaciones Web, trabajando en torno a algunas de las limitaciones de tener que enfrentar. Algunos problemas de comportamiento de las propiedades DOM presentan inconsistentes en particular, la propiedad innerHTML. El propósito de innerHTML es extraer el niño elementos de un elemento HTML en un formato de cadena. El problema es que la propiedad innerHTML no genera el texto correcto. Es necesario trabajar en torno a este. Teoría Para entender en que la propiedad innerHTML no, vamos a trabajar a través de algunos ejemplos y progresivamente muestran dónde reside el problema. El ejemplo que se ilustra es la adición dinámica de un botón y campo de texto. El código fuente para el ejemplo es el siguiente.

 Fuente: / web / ROOT / artículos AJAX / DHTML / inconsistent.html  Inconsistentes. InnerHTML 

  

La función DOMInserted agrega el botón y el texto con el elemento div con el ID dynamicallyinserted. El elemento div con el ID dynamicallyinserted no tiene elementos secundarios. Así, si se llama innerHTML, la cadena devuelta contendrá ningún texto. Cuando el usuario pulse el botón insertar dinámicamente, se llama la función DOMInserted. Utilice el mismo elemento de entrada HTML para crear ya sea un botón o cuadro de texto. Lo que distingue a un botón de un cuadro de texto es el valor del tipo de propiedad. Para crear una instancia de elemento de entrada, utilice el método document.createElement. Una vez que la instancia de elemento ha sido la instancia y se les asignará, lo añade al elemento div con el método appendChild.

Después de que ambos casos de entrada se han añadido al elemento div, se puede utilizar innerHTML para recuperar el valor de sus elementos secundarios en HTML. El valor de innerHTML se asigna al elemento de área de texto para ilustrar el valor HTML puro. El error es que no atribuyen valor existe. De hecho, el valor del atributo no existe, ya que se le asigna en el guión y lo exhibió en el HTML, pero con respecto a la propiedad innerHTML, el valor del atributo no existe. Internet Explorer genera la salida correcta. Al ejecutar el mismo código en Opera genera el mismo error que en Mozilla. Una interfaz de usuario DHTML es totalmente dinámico, de modo que los cambios realizados por los usuarios o la secuencia de comandos deben reflejarse en la propiedad. Solución El resto de este artículo se centra en cómo resolver el problema de la serialización de los elementos HTML. La solución es simple en que para generar el buffer, que necesita para recorrer todos los elementos de forma individual y generar un buffer de largo. El código siguiente ilustra la solución completa.

 Fuente: 

La función recursiva se utiliza para recorrer los elementos individuales y se puede utilizar con todos los navegadores. La función recursiva tiene un solo parámetro que representa una instancia de objeto que se introspección de las propiedades y métodos. La serialización sólo admite dos tipos de nodos (element.nodeType): 1 y 3. Si usted no sabe lo que los distintos tipos de nodos son, entonces, los números 1 y 3 no van a ayudar. Tipo de nodo 1 representa un elemento HTML plain vanilla, y tipo de nodo 3 representa un trozo de texto. La serialización ignora los comentarios, directivas de página, y similares, porque en general, no son importantes para la serialización. Si el tipo de nodo es 1, entonces un buffer se genera para el identificador del elemento y todos sus atributos asociados. Se podría pensar que la iteración todos los atributos que incluyen el atributo de valor. Para cualquier navegador distinto de Internet Explorer, los atributos que están presentes en la matriz de element.attributes dependerá del tipo de atributo.

Dependiendo del tipo de elemento de entrada, el atributo de valor no puede ser parte de la lista, lo que significa que no es accesible. También significa que usted necesita para hacer referencia a ella directamente mediante el element.value notación. El hecho de que algunos elementos se muestran y otros no lo son es un poco preocupante, porque uno se queda preguntándose qué el explorador se esconde. Si se mira de cerca el código fuente y la salida generada de la página HTML inconsistente, notará que los navegadores están manejando un atributo incompatible: Les falta el controlador de OnClick para el botón del elemento generados dinámicamente. El atributo onclick se genera para el botón definido estáticamente, pero no para el botón generado dinámicamente.

Es necesario preguntarse si desea generar los controladores de eventos cuando se serializa el código HTML. Si su respuesta es no, el htmlSerialize función de verificación de eventos de pruebas de si el atributo se inicia con las letras o y n. Pero no es correcto para serializar los acontecimientos? Se puede argumentar que si usted va a serializar HTML, es necesario para serializar todo. Sin embargo, todo serialización es difícil, porque de alguna manera debe almacenar referencias de función. No se puede almacenar la aplicación de una función en un atributo, porque los atributos no pueden contener avances de línea. Su decisión debe basarse en lo que más probable es que quiera hacer con la serialización de HTML, y que consiste en extraer del Estado. La solución propuesta no es completa, pero que resuelve un contexto específico, y eso es lo que tienen que darse cuenta. Al resolver el problema de la serialización de la referencia de funciones, está la cuestión de cómo serializar la función que se le ha asignado dinámicamente, como se ilustra en la página de ejemplo el código HTML. A modo de ejemplo, vamos a intentar una serialización inicial de funciones, a pesar de que da gusto ver que la serialización de las funciones es bastante complicada. Para serializar funciones, que te vuelva a escribir la htmlSerialize función de la siguiente manera:

htmlSerialize: function (elemento) ( scriptBuffer var = "";var recursivas = function (elemento) (var buffer = ""; si (element.nodeType == 1) (buffer + = "<" + element.nodeName + ""; didGenerateValue var = false; for (var i = 0; i <element.attributes.length; i + +) (var attr = element.attributes [i]; var name = attr.name.toLowerCase (); if (name.charAt (0) == 'o' & & name.charAt (1) == 'n') ( if (typeof (attr.value) == "string") ( buffer + = attr.name + "= \" "+ attr.value +" \ ""; ) )else if (attr.value! = null & &! (typeof (attr.value) == "string" & & attr.value.length == 0)) (if (new String (elemento [attr.name]). toLowerCase ( ) == "undefined") (buffer + = attr.name + "= \" "+ attr.value +" \ "";) else (buffer + = attr.name + "= \" "+ elemento [attr. nombre] + "\" ";)) if (attr.name.toLowerCase () ==" valor ") (didGenerateValue = true;)) if (element.nodeName.toLowerCase () ==" input "& &! didGenerateValue) (buffer + = "value = \" "+ element.value +" \ "";) if (element.onclick) ( scriptBuffer + = "var" + element.id + "_onclick =" + element.onclick; buffer + = "value = \" "+ + element.id" _onclick () \ ""; )buffer + = ">"; si (element.nodeName.toLowerCase () == "textarea") (buffer + = element.value;) else (for (var i = 0; i <element.childNodes.length; i + +) (buffer + = Recursivo (element.childNodes [i]);)) buffer + = "  ";) Else if (element.nodeType == 3) (buffer + = element.nodeValue;) return buffer;) var buffer =" "for (var i = 0; i <element.childNodes.length; i + +) (buffer + = recursivas (element.childNodes [i]);) return buffer;)

El código en negrita en la ejecución vez se refiere a la serialización de los controladores de eventos. El primer fragmento de código en negrita es la declaración de un búfer de secuencia de comandos. El búfer de secuencia de comandos es el código de secuencia de comandos que guarda con el código HTML en serie. Usted necesita las dos piezas, como el código de secuencia de comandos de forma dinámica se adhiere al asignar el código HTML en serie utilizando la propiedad innerHTML. El código en negrita segunda es la serialización de los eventos que se declaró en tiempo de diseño. Si el elemento se inserta de forma dinámica, entonces cualquier evento asociado no es en serie. Pieza La última y tercera parte de código en negrita es el código problemático y delicado. En la página de ejemplo el HTML, el evento onclick se asigna de forma dinámica en un botón se inyectó de forma dinámica. El evento onclick no era una cadena que hace referencia a otra llamada. El evento onclick referencia a una función de JavaScript en el anonimato. Dado que los atributos en serie no pueden contener implementaciones de la función completa, debe serializar la función y crear una referencia a la función se asemeja a la serialización en tiempo de diseño declaración de elemento HTML. El evento onclick dinámica asociada es una función anónima, y por lo tanto no tiene ningún identificador. El código en negrita define una función que es una concatenación de la ID de elemento y el evento onclick. Aunque el ejemplo de dinámica no tiene id, múltiples eventos OnClick idénticos se generará. También podría generar un identificador aleatorio y, a continuación de referencia que identificador aleatorio en el código HTML en serie.

El identificador aleatorio resuelve el problema del identificador de la función. Pero ahora hay dos topes. Un búfer contiene el código HTML en serie, y otro búfer contiene la secuencia de comandos que usted necesita para ejecutar de modo que la referencia de las funciones no generará errores. Como puede ver, el código se empieza a ser muy complicado y desvencijado. Es por eso que recomendamos no serializa los eventos menos que sea absolutamente necesario. Recuerde los siguientes puntos en relación con este artículo de serialización de HTML:

• serialización HTML está llena de detalles, excepciones, y poco los problemas. Por ejemplo, en la serialización utilizando htmlSerialize, IE genera montones de atributos que no se define. Esto se debe a los valores predeterminados y se hace más difícil de extraer algo de HTML. Usted debe asumir que la hoja de estilos es la gestión de impagos.

• Cuando la aplicación de la serialización HTML, no confían en las soluciones generales. Fiduciario soluciones específicas que resuelvan problemas específicos en un contexto dado.

• Las propiedades que se asigna con el método setAttribute son visibles para los navegadores cuando se utiliza la propiedad innerHTML.

• Modificado el contenido HTML que se guarda desde el navegador utilizando Guardar como no se almacena de forma coherente en todos los navegadores.

• El artículo 2 muestra cómo serializar un objeto de JavaScript, y este artículo muestra cómo serializar DHTML. Cada tipo de serialización es una serialización específica para un propósito único. Es necesario ser consciente de estos datos y elegir la serialización apropiado.

un artículo presentado por Sonja Lande


Descargo de responsabilidad:Nuestro sitio web no es responsable por el contenido de este artículo. Webarticles es un recurso de información gratuito.
Importante: Este artículo "Seriación de HTML" fue traducida por un software automático. Sentimos pena por los errores de ortografía que pueda haber ocurrido. Gracias por su comprensión.


Online: 240 users browsing the articles directory