That method will move the element into this new div, which messes up the DOM. The outerHtml method below clones the element first so the original stays untouched.
JK -----Original Message----- From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On Behalf Of Flesler Sent: Friday, December 14, 2007 7:05 PM To: jQuery (English) Subject: [jQuery] Re: Getting .html() AND the container element Why not just: $.fn.outerHtml = function(){ return $('<div></div>').append( this[0] || '' ).html(); }; Ariel Flesler On 14 dic, 22:41, "Jeffrey Kretz" <[EMAIL PROTECTED]> wrote: > Here is the method I've used for this: > > $.fn.outerHtml = function() > { > if (this.length) > { > var div = $('<div style="display:none"></div>'); > var clone = > $(this[0].cloneNode(false)).html(this.html()).appendTo(div); > var outer = div.html(); > div.remove(); > return outer; > } > else > return null; > }; > > The basic idea is to create a hidden div and then append a clone of the > element. This uses the cloneNode method which is supported on the DOM > element by all major browers: > > http://www.quirksmode.org/dom/w3c_core.html > > cloneNode(false) is used to perform a shallow clone -- there is no need to > dela with events and other similar properties. > > This is followed by setting the innerHTML of the clone (since we didn't do a > deep clone). > > Finally, get the innerHTML of the outer div, then remove it. > > This doesn't disturb the page layout and gets your total HTML. > > JK > > > > -----Original Message----- > From: jquery-en@googlegroups.com [mailto:[EMAIL PROTECTED] On > > Behalf Of Donald @ White Whale > Sent: Friday, December 14, 2007 2:21 PM > To: jQuery (English) > Subject: [jQuery] Getting .html() AND the container element > > (Apologies of this double-posts somehow; lots of trouble with Google > Groups earlier, haven't seen the message come up yet, so:) > > For an Ajax application I'm working on, I need to POST the HTML > contents of an element including the element itself. So if I have > <div class="example" id="example10"> > Lorem ipsum <strong>dolor sit amet</strong>. > </div> > I need to grab that entire bit as a single string, including the first > div and it's attributes. > > The only way I can figure to do this is to .wrap() the entire element > in another div, then get the .html() of that wrapper, then remove the > wrapper. This feels clumsy and inefficient for a pretty > straightforward task, and messes with the DOM a bit more than I'd like > (the changes can theoretically mess with the page layout on the > viewer's end). Is there a better way to do this?- Ocultar texto de la cita - > > - Mostrar texto de la cita -