2010-05-06 13 views
13

J'ai utilisé $("#parent").html() pour obtenir le code HTML interne de #parent, mais comment puis-je obtenir le code HTML du parent lui-même?Get HTML brut du nœud dans JQuery

Le cas d'utilisation est, je prends un noeud d'entrée comme celui-ci:

var field = $('input'); 

Je voudrais être en mesure d'obtenir le code html brut de ce noeud (<input type='text'>) avec quelque chose comme field.html(), mais qui revient à vide . Est-ce possible?

Répondre

10

Ou vous pouvez créer ajouter une fonction JQuery comme ceci:

jQuery.fn.outerHTML = function(s) { 
    return (s) 
    ? this.before(s).remove() 
    : jQuery("<p>").append(this.eq(0).clone()).html(); 
} 

vous pourriez donc faire:

$('input').outerHTML(); 

ou

$('input').outerHTML("new html"); 

grâce à http://yelotofu.com/2008/08/jquery-outerhtml/

+0

Est-ce que 'clone()' n'est pas un problème dû aux gestionnaires d'événements? – cletus

7

Il est un peu difficile à faire:

var field = $("input"); // assuming there is but 1 
var html = field.wrap("<div>").parent().html(); 
field.unwrap(); 

html() est analogue à innerHTML. Il n'y a pas de méthode "standard" outerHTML. Ce qui précède enveloppe l'élément que vous voulez dans un élément temporaire et obtient le innerHTML de celui-ci.

2

Vous pouvez utiliser:

var html = $('#parent')[0]; 

qui va faire le nœud #parent, puis retourner le code du premier noeud retourné (qui sera le seul dans ce cas).

7

Cette question est très ancienne, mais il y a maintenant une solution facile:

var html = $('input').prop('outerHTML'); 

Exemple Valeur de chaîne de html:
< input type = "entrée" >

tripoter :
https://jsfiddle.net/u0a1zkL1/3

Et , la technique mentionnée dans le commentaire d'Optimae fonctionne également:

var html = $('input')[0].outerHTML; 
+1

Pour quiconque ciblant l'élément ayant déclenché un événement, 'var html = event.target.outerHTML' fonctionnera également. – Optimae