Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- function convertHTMLtoJSON() {
- // Limpieza de la consola para repetir el lanzamiento del ejemplo
- console.clear();
- // Mostrar en la consola el nombre del programa
- console.log('= CONVERTIDOR HTML A JSON =');
- // Notificación en la consola sobre el inicio del trabajo del convertidor
- console.log(' INICIADA LA SERIALIZACIÓN DEL CÓDIGO HTML.');
- let objectToStringify = new Object(); // Creamos un objeto para registrar elementos y su contenido (el objeto será convertido a JSON al final)
- // Evaluación de los elementos HTML de nivel 1
- let bodyElemsLength = document.body.children.length; // Contamos la cantidad de elementos en el body
- console.log(' SE ENCONTRARON ' + bodyElemsLength + ' ELEMENTOS DE NIVEL 1 EN LA PÁGINA.'); // Notificación sobre la cantidad de elementos de nivel 1 encontrados
- console.log(document.body.children); // Mostrar en la consola los elementos de nivel 1 encontrados
- console.log('____________________________________________________________________________________________________'); // Agregar un separador después de mostrar la información principal en la consola
- // Recorrer todos los elementos HTML de nivel 1
- for (let e = 0; e < bodyElemsLength; e++) {
- // Selección del elemento de nivel 1
- let elementLevel1 = document.body.children[e];
- // Registro del nombre del elemento de nivel 1
- let elementLevel1Name = elementLevel1.tagName; // Selección del nombre del elemento de nivel 1
- console.log(' ENCONTRADO ELEMENTO DE NIVEL 1 <' + elementLevel1Name + '>'); // Notificación sobre el elemento de nivel 1 encontrado
- objectToStringify['element'+ e + 'Level1'] = [{['element' + e + 'Level1Name']: elementLevel1Name}]; // Registro del nombre del elemento de nivel 1 en el objeto
- // Registro de los atributos del elemento de nivel 1
- // Verificación del elemento de nivel 1 para la presencia de atributos
- if (elementLevel1.attributes.length > 0) {
- // Si se encontraron atributos del elemento de nivel 1
- let elementLevel1Attributes = elementLevel1.attributes; // Selección de los atributos del elemento de nivel 1
- // Declaración de un array para el registro estructurado de los atributos del elemento de nivel 1
- let saveAttributes = new Array();
- // Recorrido y registro en el objeto raíz objectToStringify de los atributos del elemento de nivel 1
- for (let a = 0; a < elementLevel1Attributes.length; a++) {
- // Notificación sobre el atributo encontrado del elemento de nivel 1
- console.log(' Atributo del elemento de nivel 1 <' + elementLevel1Name + '>: ' + elementLevel1Attributes[a].name + '=' + elementLevel1Attributes[a].value);
- let attributeName = elementLevel1Attributes[a].name; // Registro del nombre del atributo del elemento de nivel 1
- let attributeValue = elementLevel1Attributes[a].value; // Registro del valor del atributo del elemento de nivel 1
- // Registro del nombre y valor del atributo actual del elemento de nivel 1 en el objeto
- let currentAttribute = {
- ['element' + e + 'Level1' + 'attribute' + a]: [
- {
- ['element' + e + 'Level1' + 'attribute' + a + 'Name']: attributeName
- },
- {
- ['element' + e + 'Level1' + 'attribute' + a + 'Value']: attributeValue
- }
- ]
- };
- // Guardar el atributo estructurado del elemento de nivel 1 en el array
- saveAttributes.push(currentAttribute);
- };
- // Registro de los atributos estructurados del elemento de nivel 1 desde el array en el objeto raíz objectToStringify
- objectToStringify['element' + e + 'Level1'][1] = {
- ['element' + e + 'Level1Attributes']: saveAttributes
- };
- } else {
- // Si el elemento de nivel 1 no tiene atributos, mostrar notificación en la consola
- console.log(' El elemento de nivel 1 <' + elementLevel1Name + '> no tiene atributos.');
- // Si el elemento de nivel 1 no tiene atributos, el objeto con espacio para ellos se deja con valor vacío
- objectToStringify['element' + e + 'Level1'][1] = {
- ['element' + e + 'Level1Attributes']: ''
- };
- };
- // Registro del contenido del elemento de nivel 1 (otros elementos o texto)
- // Verificación del elemento de nivel 1 para la presencia de elementos anidados
- if (elementLevel1.children.length > 0) {
- // Notificación en la consola sobre la cantidad de elementos de nivel 2 encontrados dentro del elemento de nivel 1
- console.log(' El elemento <' + elementLevel1Name + '> tiene ' + elementLevel1.children.length + ' elementos anidados.');
- // Declaración de un array para el registro estructurado del contenido del elemento de nivel 1
- // (elementos de nivel 2)
- let elementLevel1Content = new Array();
- // Recorrido de los elementos de nivel 2, si se encuentran
- for (let e2 = 0; e2 < elementLevel1.children.length; e2++) {
- let elementLevel2 = elementLevel1.children[e2]; // Selección del elemento de nivel 2
- // Declaración de un array para el registro estructurado del elemento actual de nivel 2
- let thisInnerContentLevel2 = new Array();
- // Registro del nombre del elemento de nivel 2
- let elementLevel2Name = elementLevel2.tagName; // Selección del nombre del elemento de nivel 2
- console.log(' ENCONTRADO ELEMENTO DE NIVEL 2 <' + elementLevel2Name + '>'); // Notificación sobre el elemento de nivel 2 encontrado
- // Registro del nombre estructurado del elemento de nivel 2
- let elementLevel2NameSaver = {
- ['element' + e2 + 'Level2Name']: elementLevel2Name
- };
- thisInnerContentLevel2.push(elementLevel2NameSaver);
- // Registro de los atributos del elemento de nivel 2
- // Verificación del elemento de nivel 2 para la presencia de atributos
- if (elementLevel2.attributes.length > 0) {
- // Si se encontraron atributos del elemento de nivel 2
- let elementLevel2Attributes = elementLevel2.attributes; // Selección de los atributos del elemento de nivel 2
- // Declaración de un array para el registro estructurado de los atributos del elemento de nivel 2
- let saveAttributes2 = new Array();
- // Recorrido y registro de los atributos del elemento de nivel 2
- for (let a2 = 0; a2 < elementLevel2Attributes.length; a2++) {
- // Notificación sobre el atributo encontrado del elemento de nivel 2
- console.log(' Atributo del elemento de nivel 2 <' + elementLevel2Name + '>: ' + elementLevel2Attributes[a2].name + '=' + elementLevel2Attributes[a2].value);
- let attributeName2 = elementLevel2Attributes[a2].name; // Registro del nombre del atributo del elemento de nivel 2
- let attributeValue2 = elementLevel2Attributes[a2].value; // Registro del valor del atributo del elemento de nivel 2
- // Registro del nombre y valor del atributo actual del elemento de nivel 2 en el objeto
- let currentAttribute2 = {
- ['element' + e2 + 'Level2' + 'attribute' + a2]: [
- {
- ['element' + e2 + 'Level2' + 'attribute' + a2 + 'Name']: attributeName2
- },
- {
- ['element' + e2 + 'Level2' + 'attribute' + a2 + 'Value']: attributeValue2
- }
- ]
- };
- // Guardar el atributo estructurado del elemento de nivel 2 en el array
- saveAttributes2.push(currentAttribute2);
- };
- // Registro de los atributos estructurados del elemento de nivel 2 desde el array de atributos del elemento de nivel 2 (saveAttributes2)
- // en el array de contenido del elemento de nivel 1 (elemenLevel1Content)
- // usando un objeto intermedio elementLevel2AttributesSaver
- let elementLevel2AttributesSaver = {
- ['element' + e2 + 'Level2Attributes']: saveAttributes2
- };
- thisInnerContentLevel2.push(elementLevel2AttributesSaver);
- } else {
- // Si el elemento de nivel 2 no tiene atributos, mostrar notificación en la consola
- console.log(' El elemento de nivel 2 <' + elementLevel2Name + '> no tiene atributos.');
- // Si el elemento de nivel 2 no tiene atributos, el objeto con espacio para ellos se deja con valor vacío
- let elementLevel2AttributesSaver = {
- ['element' + e2 + 'Level2Attributes']: ''
- };
- thisInnerContentLevel2.push(elementLevel2AttributesSaver);
- };
- // Registro del contenido del elemento de nivel 2 (otros elementos o texto)
- // Verificación del elemento de nivel 2 para la presencia de elementos anidados
- if (elementLevel2.children.length > 0) {
- // Notificación en la consola sobre la cantidad de elementos de nivel 3 encontrados dentro del elemento de nivel 2
- console.log(' El elemento <' + elementLevel2Name + '> tiene ' + elementLevel2.children.length + ' elementos anidados.');
- // Declaración de un array para el registro estructurado del contenido del elemento de nivel 2
- // (elementos de nivel 3)
- let elementLevel2Content = new Array();
- // Recorrido de los elementos de nivel 3, si se encuentran
- for (let e3 = 0; e3 < elementLevel2.children.length; e3++) {
- let elementLevel3 = elementLevel2.children[e3]; // Selección del elemento de nivel 3
- // Declaración de un array para el registro estructurado del elemento actual de nivel 3
- let thisInnerContentLevel3 = new Array();
- // Registro del nombre del elemento de nivel 3
- let elementLevel3Name = elementLevel3.tagName; // Selección del nombre del elemento de nivel 3
- console.log(' ENCONTRADO ELEMENTO DE NIVEL 3 <' + elementLevel3Name + '>'); // Notificación sobre el elemento de nivel 3 encontrado
- // Registro del nombre estructurado del elemento de nivel 3
- let elementLevel3NameSaver = {
- ['element' + e3 + 'Level3Name']: elementLevel3Name
- };
- thisInnerContentLevel3.push(elementLevel3NameSaver);
- // Registro de los atributos del elemento de nivel 3
- // Verificación del elemento de nivel 3 para la presencia de atributos
- if (elementLevel3.attributes.length > 0) {
- // Si se encontraron atributos del elemento de nivel 3
- let elementLevel3Attributes = elementLevel3.attributes; // Selección de los atributos del elemento de nivel 3
- // Declaración de un array para el registro estructurado de los atributos del elemento de nivel 3
- let saveAttributes3 = new Array();
- // Recorrido y registro de los atributos del elemento de nivel 3
- for (let a3 = 0; a3 < elementLevel3Attributes.length; a3++) {
- // Notificación sobre el atributo encontrado del elemento de nivel 3
- console.log(' Atributo del elemento de nivel 3 <' + elementLevel3Name + '>: ' + elementLevel3Attributes[a3].name + '=' + elementLevel3Attributes[a3].value);
- let attributeName3 = elementLevel3Attributes[a3].name; // Registro del nombre del atributo del elemento de nivel 3
- let attributeValue3 = elementLevel3Attributes[a3].value; // Registro del valor del atributo del elemento de nivel 3
- // Registro del nombre y valor del atributo actual del elemento de nivel 3 en el objeto
- let currentAttribute3 = {
- ['element' + e3 + 'Level3' + 'attribute' + a3]: [
- {
- ['element' + e3 + 'Level3' + 'attribute' + a3 + 'Name']: attributeName3
- },
- {
- ['element' + e3 + 'Level3' + 'attribute' + a3 + 'Value']: attributeValue3
- }
- ]
- };
- // Guardar el atributo estructurado del elemento de nivel 3 en el array
- saveAttributes3.push(currentAttribute3);
- };
- // Registro de los atributos estructurados del elemento de nivel 3 desde el array de atributos del elemento de nivel 3 (saveAttributes3)
- // en el array del elemento de nivel 3 (thisInnerContentLevel3)
- // usando un objeto intermedio elementLevel3AttributesSaver
- let elementLevel3AttributesSaver = {
- ['element' + e3 + 'Level3Attributes']: saveAttributes3
- };
- thisInnerContentLevel3.push(elementLevel3AttributesSaver);
- } else {
- // Si el elemento de nivel 3 no tiene atributos, mostrar notificación en la consola
- console.log(' El elemento de nivel 3 <' + elementLevel3Name + '> no tiene atributos.');
- // Si el elemento de nivel 3 no tiene atributos, el objeto con espacio para ellos se deja con valor vacío
- let elementLevel3AttributesSaver = {
- ['element' + e3 + 'Level3Attributes']: ''
- };
- thisInnerContentLevel3.push(elementLevel3AttributesSaver);
- };
- // Registro de cualquier contenido HTML del elemento de nivel 3
- // Verificación del elemento de nivel 3 para la presencia de cualquier contenido HTML
- if (elementLevel3.innerHTML) {
- let elementLevel3innerHTML = elementLevel3.innerHTML;
- console.log(' El elemento de nivel 3 <' + elementLevel3Name + '> contiene contenido: "' + elementLevel3innerHTML + '"');
- elementLevel3innerHTMLSaver = {
- ['element' + e3 + 'Level3Content']: elementLevel3innerHTML
- };
- thisInnerContentLevel3.push(elementLevel3innerHTMLSaver);
- } else {
- console.log(' El elemento de nivel 3 <' + elementLevel3Name + '> no contiene contenido.');
- // Si el elemento de nivel 3 no tiene contenido, el objeto con espacio para el contenido se deja con valor vacío
- let elementLevel3EmptyContentSaver = {
- ['element' + e3 + 'Level3Content']: ''
- };
- thisInnerContentLevel3.push(elementLevel3EmptyContentSaver);
- };
- // Registro del elemento anidado actual de nivel 3 en un objeto intermedio
- // (contiene un objeto con número de orden y un valor-array de tres objetos:
- // nombre, atributos, contenido del elemento de nivel 3)
- let elementLevel3Saver = {
- ['element' + e3 + 'Level3']: thisInnerContentLevel3
- };
- // Registro del objeto intermedio con el elemento anidado de nivel 3 en el array de contenido del elemento de nivel 2
- elementLevel2Content.push(elementLevel3Saver);
- }; // Fin del ciclo for para recorrer elementos de nivel 3, si se encontraron
- // Registro del array de todo el contenido del elemento de nivel 2 (elementos de nivel 3)
- // en un objeto intermedio (contiene el número de orden del elemento de nivel 2 al que pertenece el contenido,
- // y un valor-array del contenido actual del elemento de nivel 2 seleccionado
- let elementLevel2ContentSaver = {
- ['element' + e2 + 'Level2Content']: elementLevel2Content
- };
- // Registro del objeto intermedio de todo el contenido estructurado del elemento de nivel 2
- // en el array del elemento de nivel 2
- thisInnerContentLevel2.push(elementLevel2ContentSaver);
- // Fin de la verificación de elementos de nivel 2 para la presencia de elementos anidados de nivel 3
- // Verificación de elementos de nivel 2 para la presencia de texto o ausencia de anidaciones
- } else if (elementLevel2.children.length == 0) {
- // Verificación del elemento de nivel 2 para la presencia de texto, si no hay elementos anidados
- console.log(' El elemento de nivel 2 <' + elementLevel2Name + '> no tiene elementos anidados. Búsqueda de texto.');
- if (elementLevel2.textContent) {
- let elementLevel2Text = elementLevel2.textContent; // Selección del contenido de texto dentro del elemento de nivel 2
- console.log(' El elemento de nivel 2 <' + elementLevel2Name + '> contiene texto: "' + elementLevel2Text + '"');
- // Registro del texto del elemento de nivel 2
- let elementLevel2TextSaver = {
- ['element' + e2 + 'Level2Content']: elementLevel2Text
- };
- thisInnerContentLevel2.push(elementLevel2TextSaver);
- } else {
- // Si el elemento de nivel 2 no contiene ni elementos anidados ni texto
- console.log(' El elemento de nivel 2 <' + elementLevel2Name + '> no contiene texto.');
- // Si el elemento de nivel 2 no tiene contenido, el objeto con espacio para el contenido se deja con valor vacío
- let elementLevel2EmptyContentSaver = {
- ['element' + e2 + 'Level2Content']: ''
- };
- thisInnerContentLevel2.push(elementLevel2EmptyContentSaver);
- };
- };
- // Registro de todos los elementos anidados de nivel 2 en un objeto intermedio
- let elementLevel2Saver = {
- ['element' + e2 + 'Level2']: thisInnerContentLevel2
- };
- // Registro del objeto intermedio con los elementos anidados de nivel 2 en el array de contenido del elemento de nivel 1
- elementLevel1Content.push(elementLevel2Saver);
- }; // Fin del ciclo for para recorrer elementos de nivel 2, si se encontraron
- // Registro del contenido estructurado del elemento de nivel 1 desde el array en el objeto raíz objectToStringify
- objectToStringify['element' + e + 'Level1'][2] = {
- ['element' + e + 'Level1Content']: elementLevel1Content
- };
- } else if (elementLevel1.children.length == 0) {
- // Verificación del elemento de nivel 1 para la presencia de texto, si no hay elementos anidados
- console.log(' El elemento de nivel 1 <' + elementLevel1Name + '> no tiene elementos anidados. Búsqueda de texto.');
- if (elementLevel1.textContent) {
- let elementLevel1Text = elementLevel1.textContent; // Selección del contenido de texto dentro del elemento de nivel 1
- console.log(' El elemento de nivel 1 <' + elementLevel1Name + '> contiene texto: "' + elementLevel1Text + '"');
- // Registro del texto del elemento de nivel 1 en el objeto raíz objectToStringify
- objectToStringify['element' + e + 'Level1'][2] = {
- ['element' + e + 'Level1Content']: elementLevel1Text
- };
- } else {
- // Si el elemento de nivel 1 no contiene ni elementos anidados ni texto
- console.log(' El elemento de nivel 1 <' + elementLevel1Name + '> no contiene texto.');
- // Si el elemento de nivel 1 no tiene contenido, el objeto con espacio para el contenido se deja con valor vacío
- objectToStringify['element' + e + 'Level1'][2] = {
- ['element' + e + 'Level1Content']: ''
- };
- };
- };
- };
- // Mostrar el resultado de la conversión de HTML a JSON
- let result = JSON.stringify(objectToStringify); // Serializamos el objeto
- document.body.innerHTML = result; // Reemplazamos el cuerpo de la página con nuestro JSON
- // Agregar un separador antes de la notificación en la consola sobre la finalización del trabajo del convertidor
- console.log('____________________________________________________________________________________________________');
- // Notificación en la consola sobre la finalización del trabajo del convertidor
- console.log('SERIALIZACIÓN DEL CÓDIGO HTML COMPLETADA.');
- };
- setTimeout(convertHTMLtoJSON, 1000); // Mostramos el resultado un segundo después de cargar la página inicial
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement