YUI Editor: deshacerse de < html > etiquetas en contenido
-
03-07-2019 - |
Pregunta
Implementé el editor de texto enriquecido YUI y me gustaría deshacerme del < html >
, < body >
y DOCTYPE
etiquetas tan pronto como guardo el contenido del editor. Sé que podría hacer esto luego analizando el HTML, pero debe haber una mejor solución.
En este momento esto se guarda cuando edito un texto en el editor YUI:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
<body>
<p>foo</p>
</body>
</html>
... pero me gustaría guardar esto:
<p>foo</p>
¿Alguna idea?
PD: implementé el editor YUI usando el yui_editor plugin para ruby ??on rails , ¡pero una respuesta genérica del editor YUI también sería bienvenida!
Solución
Mientras tanto, resolví el problema yo mismo analizando el html al enviar. Sí, lo sé, al principio no estaba buscando esta solución, pero finalmente llegué a la conclusión de que es la forma más fácil de resolverla. Utilicé el Nokogiri RubyGem para que Rails realice el análisis:
value = Nokogiri::HTML(yui_content).css('body').to_html
value.gsub!(/<body>/,'')
value.gsub!(/<\/body>/,'')
Otros consejos
Una solución sería esta, usa expresiones regulares para atrapar todo entre < body
> y < / body >
. Ejemplo (modificado desde la página del editor YUI):
var myEditor = new YAHOO.widget.Editor('msgpost');
myEditor.render();
YAHOO.util.Event.on('somebutton', 'click', function() {
myEditor.saveHTML();
//The var html will now have the contents of the textarea
var html = myEditor.get('element').value, match;
match = html.match(/<body[^>]*>([\s\S]*?)<\/body>/i);
html = match ? match[1] : html;
});