Créer un document à partir d'une chaîne dans Gecko
-
06-07-2019 - |
Question
J'ai une chaîne telle que
<html><body><div id="message">Hello World!</div></body></html>
et j'aimerais obtenir le contenu de l'élément #message sans analyser le code HTML moi-même.
Je pensais que je pourrais peut-être créer un objet document à partir d'une chaîne dans Gecko (ceci est pour un add-on Firefox), mais je ne vois pas de moyen simple.
J'ai remarqué qu'il existe une méthode createDocument , mais cela ne fonctionne pas. t prendre une ficelle. Il faudrait que je supprime la partie <html>
du texte, et là encore je commence à assumer des trucs.
Quelqu'un a des idées? Merci.
EDIT: cela semble fonctionner pour moi:
doc = document.implementation.createDocument( "http://www.w3.org/1999/xhtml", "html", null );
doc.firstChild.innerHTML = '<html><body><div id="message">Hello World!</div></body></html>';
node = doc.getElementById( "message" );
alert( node.innerHTML );
La solution
Où trouvez-vous la chaîne? Si c'est du XML, vous pourriez vous en tirer en utilisant DOMParser
.
Sinon, vous devez créer un document HTML - https://developer.mozilla.org/en / Parsing_HTML_From_Chrome .
Le simple fait d'utiliser createDocument
semble être suspect, car les gens ont utilisé des solutions plus complexes tout le temps.
Autres conseils
Je n'aime pas répondre à ma propre question, mais cela semble avoir fonctionné pour moi:
doc = document.implementation.createDocument( "http://www.w3.org/1999/xhtml", "html", null );
doc.firstChild.innerHTML = '<html><body><div id="message">Hello World!</div></body></html>';
node = doc.getElementById( "message" );
alert( node.innerHTML );
Est-ce que c'est toujours cette syntaxe? Si oui, pourquoi ne pas utiliser une regex?