2009-12-16 4 views
3

Par exemple, si je HTML ul liste commeComment obtenir la chaîne html d'une balise enfant et d'une balise parent en utilisant jquery?

<ul id="ulIdentificator"> 
    <li id="li0"></li> 
    <li id="li1"></li> 
    <li id="li2"><label id="label1"></label></li> 
</ul> 

Si j'utilise jQuery comme ce

var htmlStr = $("#li2").html(); 

Le résultat sera que la chaîne qui contient balise label <LABEL id="label1"></LABEL></li> je dois obtenir la chaîne Html qui contient ce <LI id="li2"><LABEL id="label1"></LABEL></LI>

+1

La prochaine question de jquery après votre http://stackoverflow.com/questions/1917040/can-i-get-the-full-html-represenation-of-an-htmlelment-dom-object –

Répondre

6

Les mentions second OuterHTML technique Andres (du blog des architectes Web) fonctionnent sur tous les navigateurs, c'est donc probablement un meilleur choix. L'idée de base est que vous pouvez obtenir HTML externe d'un élément en le rendant innerHTML d'un autre élément:

var outerHtml = $("<div/>").append($("#li2").clone()).html(); 

Il y a seulement un peu un peu délicat - assurez-vous de clone votre élément d'origine, de sorte que vous ne retirez pas de la DOM.

Si vous le faites souvent ou que vous voulez le faire pour des tableaux d'éléments, il vaut probablement la peine de suivre l'exemple lié et de faire un petit plugin pour cela.

+1

+1 très bonne réponse. Mais dans [cette autre question] (http://stackoverflow.com/questions/995760/in-jquery-are-there-any-function-that-similar-to-html-or-text-but-return-the/ 5314397 # 5314397) vous avez la même technique avec aussi une solution pour un problème avec ** IFrames **. –

0
+3

L'OuterHTML II La technique est si simple qu'il vaut la peine de la reproduire dans le corps de votre réponse. –

+0

Ok, c'est la bonne réponse, mais je l'accepterai si vous ajoutez quelques exemples, pas seulement 2 liens, pour que d'autres SO le voient ici. – nemke

1

Vous pouvez également écrire un petit plugin jQuery avec la méthode proposée de Jeff sternale:

// jQuery plugin 'htmlWithParent' 

jQuery(function($) { 

    $.fn.htmlWithParent = function() { return $j("<div/>").append($j(this).clone()).html(); }; 

});

et utiliser ce petit plugin cutom, par exemple:

var htmlCode = $("<p><span>Helo world!</span></p>"); 

// Return only child nodes: <span>Helo world!</span> 
var output1 = $(htmlCode).html(); 

// Return whole HTML code (childs + parent): <p><span>Helo world!</span></p> 
var output2 = $(htmlCode).htmlWithParent();

méthode très utile. ;)

+1

Beau travail, mérite un vote :) – nemke

+0

Merci. ;) Je fais toujours de petits plugins jQuery personnalisés. Moins de code, plus transparent. –

Questions connexes