2008-11-28 7 views
7

Wie können Sie ein jQuery-Ergebnisset in reines HTML konvertieren?Konvertieren eines jQuery-Sets in HTML

<div class="abc"> 
    foo <strong>FOO</strong> 
</div> 
<div class="def"> 
    bar 
</div> 

-

var $mySet = $('div'); 

Da $mySet, wie würden Sie gehen über die oben auf die einfache HTML-Rückkehr?

Antwort

4

Wenn Ihr Satz von genau einem Punkt besteht, können Sie sie verwenden olde Javascript:

var html = $mySet[0].outerHTML; // note HTML is all caps... that always burns me 
+0

Sie könnten dies erweitern, um alle Elemente relativ einfach zu erhalten: '$ mySet.map (function() {return this.outerHTML;}). Get(). Join ('');' Zurück als ich diese Frage schrieb, nicht alle Browser haben 'outerHTML' unterstützt, aber jetzt scheint es [ziemlich gute Unterstützung] zu haben (https://developer.mozilla.org/en/DOM/element.outerHTML#Browser_compatibility) – nickf

+1

es wird nur die HTML-Zeichenkette der zurückgegeben erstes Element gefunden. – vsync

+0

Kein großer Fan dieser Antwort - was ist, wenn Ihr Set _doesnot_ aus einem Gegenstand besteht? – Thomas

0
var $mySet = $('div'); 
var html = $mySet.html(); 

Wenn Sie das Element HTML wollen auch (nicht getestet):

var $mySet = $('div'); 
var html = $mySet.clone().wrap('<div></div>').html(); 

By the way, hier ist $ Teil des Variablennamens. Javascript benötigt kein $ wie in PHP für Variablennamen, aber es tut nicht weh, es zu haben.

+1

die falsche Entschuldigung ist. Dies wird nur die innere HTML des ersten Divs zurückgeben. Ich suche tatsächlich, um es wie im ersten Beispiel oben zu HTML zurückzukehren. – nickf

+0

Gib meinem zweiten Ausschnitt einen Versuch. – strager

0

Verwenden Sie die jQuery appendTo Methode, wenn ich gut verstehe, was Sie meinen, indem Sie "zurück zum einfachen HTML oben".

11

Ich würde vorschlagen, einen temporären Container erstellen, dann die html() dieses neuen Container greifen:

var html = $('<div>').append($('div').clone()).html(); 
alert(html); 

// alerts: 

<div class="abc"> 
    foo <strong>FOO</strong> 
</div><div class="def"> 
    bar 
</div> 
1

vielleicht, was Sie wollen, ist eine clientseitige Template-Engine. überprüfen Sie den Beitrag Client Templating with jQuery

ich benutze es und es ist ziemlich cool. Sie legen nur die Vorlage, die Sie in einem Div verwenden möchten, dann füttern Sie es mit einem JSON-Objekt/Array und das ist es.