Sous la direction de YUI: se débarrasser de < html > balises dans le contenu
-
03-07-2019 - |
Question
J'ai implémenté l’ éditeur de texte enrichi YUI et je souhaite supprimer le < html >
, < corps >
et DOCTYPE
dès que j'enregistre le contenu dans l'éditeur. Je sais que je pourrais le faire après en analysant le code HTML, mais il doit y avoir une meilleure solution.
À présent, cela est enregistré lorsque je modifie un texte dans l'éditeur 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>
... mais j'aimerais simplement enregistrer ceci:
<p>foo</p>
Une idée?
PS: J'ai implémenté l'éditeur YUI à l'aide du du plug-in yui_editor pour ruby ??on rails . , mais une réponse générique de l'éditeur YUI serait également la bienvenue!
La solution
En attendant, j'ai moi-même résolu le problème en analysant le code HTML lors de la soumission. Oui, je sais, je ne cherchais pas cette solution au début, mais je suis finalement arrivée à la conclusion que c’était le moyen le plus facile de la résoudre. J'ai utilisé le Nokogiri RubyGem pour que Rails effectue l'analyse syntaxique:
value = Nokogiri::HTML(yui_content).css('body').to_html
value.gsub!(/<body>/,'')
value.gsub!(/<\/body>/,'')
Autres conseils
Une solution serait la suivante: il utilise des expressions régulières pour tout saisir entre < body
> et < / body >
. Exemple (modifié depuis la page de l'éditeur 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;
});