Cambiando el documento
Hasta aquí hemos consultado el documento y su contenido. Lo cual está muy bien. Pero... ¿y si quiero hacer cambios?
Vayamos por partes. Comencemos por un
método que permita eliminar un nodo, junto con sus posibles nodos
hijos:
def
removeFromDocument if typeOf == :document raise 'Cannot remove the whole document' end deleteTags(tagRange) end |
Mal empezamos. Este método llama a
otro que dejaremos para más adelante. ¿Cuántos os debo ya? Uno,
dos, tres, cuatro...
Pero si lo vamos a dejar para más
adelante, lo dejamos y seguimos. Que si no nos atrancamos. Que, como
bien apuntan los Monty Python, ya se sabe que hay que hablar menos y
hacer más. Porque sólo diciendo no se avanza y es preciso actuar.
Porque lo importante es lo que se hace y habría que dejar a un lado
la palabrería para centrarnos en lo importante...
¿Por dónde íbamos? Eso... vamos a
crear un método que nos permita cambiar el “innerHTML” de una
etiqueta. Para ello, primero miramos si la etiqueta no cuenta con un
cierre explícito y, si es necesario, lo añadimos. Después,
eliminamos los nodos correspondientes al “innerHTML” antiguo. Y
finalmente insertamos en su lugar lo nuevo:
def
changeInnerHTML(html) if typeOf != :HTMLTag raise 'Not a tag' end # If there is no closing tag, add it if @nodes[@starts_at].autoclosed insertTags(@starts_at + 1, [HTMLclose.new(tagName)]) @ends_at = @starts_at + 1 @nodes[@starts_at].autoclosed = false end deleteTags((@starts_at + 1)..(@ends_at - 1)) insertTags(@starts_at + 1, HTMLParser.new.parseHTML(html)) end |
Para las inserciones, realizamos
llamadas a otro método, “insertTags”. Y sabéis qué: voy a
dejar éste también para más adelante... Por ahora sólo diré que
inserta, en la posición que le indiquemos como primer parámetro, el
código HTML que le pasemos como segundo.
Utilizando “insertTags” podemos
crear otros dos métodos que permitan insertar código HTML antes o
después del objeto que estamos manipulando:
def
insertBefore(html) insertTags(@starts_at, HTMLParser.new.parseHTML(html)) end def insertAfter(html) insertTags(@ends_at + 1, HTMLParser.new.parseHTML(html)) end |
No hay comentarios:
Publicar un comentario