Javascript: J'ai la représentation DOM d'un nœud (élément ou document) et je cherche la représentation sous forme de chaîne de celui-ci. Par exemple,
var el = document.createElement("p");
el.appendChild(document.createTextNode("Test"));
devrait céder:
get_string(el) == "<p>Test</p>";
J'ai le sentiment fort, qu'il me manque quelque chose de trivialement simple, mais je ne trouve tout simplement pas de méthode qui fonctionne dans IE, FF, Safari et Opera. Par conséquent, externalHTML n'est pas une option.
javascript
string
dom
cross-browser
element
Boldewyn
la source
la source
Réponses:
Vous pouvez créer un nœud parent temporaire et en obtenir le contenu innerHTML:
EDIT: Veuillez voir la réponse ci-dessous à propos de externalHTML. el.outerHTML devrait être tout ce qui est nécessaire.
la source
document.documentElement
dans un div? Holy crap ....element
avant de l'ajouter,tmp
car lorsque vous l'ajoutereztmp
, il sera supprimédocument
.Ce que vous recherchez, c'est «externalHTML», mais nous avons besoin d'une solution de secours car elle n'est pas compatible avec les anciens navigateurs.
Vous trouverez mon plugin jQuery ici: Obtenez le HTML externe de l'élément sélectionné
la source
outerHTML
dans la version 11, après avoir posé la question. Ce n'était donc pas une option à l'époque. J'ai même mis à jour ma question avec un commentaire approprié, si vous regardez attentivement.innerHtml
innerHTML
; )outerHTML
attribut. Voir aussi caniuse.com/#feat=xml-serializerJe ne pense pas que vous ayez besoin d'un script compliqué pour cela. Juste utiliser
la source
Sous FF, vous pouvez utiliser l'
XMLSerializer
objet pour sérialiser XML en une chaîne. IE vous donne unexml
propriété d'un nœud. Vous pouvez donc faire ce qui suit:la source
.xml
ne fonctionne pas sur les nœuds DOM (comme dans les nœuds de la page actuelle). Cela ne fonctionne que sur les nœuds de document XML DOM.outerHTML
ne fonctionne pas sur les nœuds de document XML DOM. Cela ne fonctionne que sur les nœuds DOM (comme dans les nœuds de la page actuelle). Bonne cohérence là je dirais.Utilisez l'élément # externalHTML:
Il peut également être utilisé pour écrire des éléments DOM. De la documentation de Mozilla:
https://developer.mozilla.org/en-US/docs/Web/API/Element/outerHTML
la source
Utilisez element.outerHTML pour obtenir une représentation complète de l'élément, y compris les balises externes et les attributs.
la source
Si votre élément a un parent
la source
<li>
dans une liste.Essayer
la source
J'ai trouvé que pour mes cas d'utilisation, je ne veux pas toujours l'intégralité du HTML externe. De nombreux nœuds ont juste trop d'enfants à afficher.
Voici une fonction (testée au minimum dans Chrome):
https://gist.github.com/kahunacohen/467f5cc259b5d4a85eb201518dcb15ec
la source
J'ai perdu beaucoup de temps à déterminer ce qui ne va pas lorsque j'itère dans DOMElements avec le code dans la réponse acceptée. C'est ce qui a fonctionné pour moi, sinon chaque deuxième élément disparaît du document:
la source
document.getElementsByTagName()
, cette collection changera à mi-for
boucle, d'où le saut de chaque deuxième élément.si vous utilisez react:
la source
.outerHTML
n'est pas spécifique à React; c'est un standard DOM. Découvrez la réponse de @Rich Apodaca.reactdom.findDOMNode()
..., pas le.outerHTML
, mais merci pour la position.