¿Cómo puedo hacer que esas partes del código funcionen? Intentando completar la tarea con el generador de HTML personalizado: debe admitir el encadenamiento y el anidamiento. Entiendo que necesito devolver esto , pero ¿cómo generar una cadena con HTML?
// nesting const template = Templater().div( Templater().p('Hello'), Templater().p('World') ) console.log(template.toString()) // chaining console.log(Templater().br('error').toString())ejemplo de clase que trato de crear:
class Templater { constructor() {} div(tags) { return `<div>${tags}</div>` } span(tags) { return `<span>${tags}</span>` } br(argument) { if(argument) { return new Error('Nested content is not allowed'); } else { return '<br>' } } p(tags) { return `<p>${tags}</p>` } }No tengo idea de lo que tengo que hacer.
Parece que principalmente necesita un método toString personalizado que devuelva el estado de las etiquetas llamadas hasta ahora.
También deberá cambiar la clase a una función, porque las clases no se pueden usar sin new .
const templater = () => { let markup = ''; const transform = tags => tags.join(''); return { div(...tags) { markup += `<div>${transform(tags)}</div>` return this; }, span(...tags) { markup += `<span>${transform(tags)}</span>` return this; }, br(argument) { if (argument) { throw new Error('Nested content is not allowed'); } else { markup += '<br>' return this; } }, p(...tags) { markup += `<p>${transform(tags)}</p>` return this; }, toString() { return markup; }, }; }; // nesting const template = templater().div( templater().p('Hello'), templater().p('World') ) console.log(template.toString()) console.log(templater().br('error').toString())