ChatGPT解决这个技术问题 Extra ChatGPT

How do you convert a jQuery object into a string?

How do you convert a jQuery object into a string?


P
Peter Mortensen

I assume you're asking for the full HTML string. If that's the case, something like this will do the trick:

$('<div>').append($('#item-of-interest').clone()).html(); 

This is explained in more depth here, but essentially you make a new node to wrap the item of interest, do the manipulations, remove it, and grab the HTML.

If you're just after a string representation, then go with new String(obj).

Update

I wrote the original answer in 2009. As of 2014, most major browsers now support outerHTML as a native property (see, for example, Firefox and Internet Explorer), so you can do:

$('#item-of-interest').prop('outerHTML');

It sucks that there isn't a method to just do this, but this is a great solution regardless.
this removes the head and body tags
@user85461 That isn't a valid DOM node, though, so it would be wrong to try to call outerHTML on it to begin with. (Only a tiny subset of what can go in $(...) is a valid DOM node.)
@Moss it gives you inner html, or simplier, what is inside of element, while outerHtml gives you element as a whole
Note, that you will lose data
n
nickh

With jQuery 1.6, this seems to be a more elegant solution:

$('#element-of-interest').prop('outerHTML');

@Jean-PhilippeLeclerc On Firefox 15.0.1 (linux) it works like a charm.
m
mppfiles

Just use .get(0) to grab the native element, and get its outerHTML property:

var $elem = $('<a href="#">Some element</a>');
console.log("HTML is: " + $elem.get(0).outerHTML);

So much better as it retains my attributes as well. Thanks!
P
Peter Mortensen

Can you be a little more specific? If you're trying to get the HTML inside of a tag you can do something like this:

HTML snippet:

<p><b>This is some text</b></p>

jQuery:

var txt = $('p').html(); // Value of text is <b>This is some text</b>

c
crystalh

The best way to find out what properties and methods are available to an HTML node (object) is to do something like:

console.log($("#my-node"));

From jQuery 1.6+ you can just use outerHTML to include the HTML tags in your string output:

var node = $("#my-node").outerHTML;

it's $('#my-node').get(0).outerHTML as in mppfiles' answer
.outerHTML didn't work for me, but .prop('outerHTML') did.
P
Peter Mortensen

jQuery is up in here, so:

jQuery.fn.goodOLauterHTML= function() {
    return $('<a></a>').append( this.clone() ).html();
}

Return all that HTML stuff:

$('div' /*elys with HTML text stuff that you want */ ).goodOLauterHTML(); // alerts tags and all

J
Johan Dettmar

This seems to work fine for me:

$("#id")[0].outerHTML

I was also using this but this doesn't seem to work for Firefox 6.0.1.
M
Martin Sznapka

The accepted answer doesn't cover text nodes (undefined is printed out).

This code snippet solves it:

var htmlElements = $('

google

↵↵

bing

'), htmlString = ''; htmlElements.each(function () { var element = $(this).get(0); if (element.nodeType === Node.ELEMENT_NODE) { htmlString += element.outerHTML; } else if (element.nodeType === Node.TEXT_NODE) { htmlString += element.nodeValue; } }); alert('String html: ' + htmlString);


Thanks man, the accepted answer did not work for me. Yours did!
S
St Kiss

No need to clone and add to the DOM to use .html(), you can do:

$('#item-of-interest').wrap('<div></div>').html()

But doesn't wrap() return the wrapped element, not the element with which it was wrapped? So this should give the html of the #item-of-interest not it's parent div element (unless jQuery's changed since February of 2012).
C
Charles Menguy

It may be possible to use the jQuery.makeArray(obj) utility function:

var obj = $('<p />',{'class':'className'}).html('peekaboo');
var objArr = $.makeArray(obj);
var plainText = objArr[0];

Y
Yaron Helfer

If you want to stringify an HTML element in order to pass it somewhere and parse it back to an element try by creating a unique query for the element:

// 'e' is a circular object that can't be stringify
var e = document.getElementById('MyElement')

// now 'e_str' is a unique query for this element that can be stringify 
var e_str = e.tagName
  + ( e.id != "" ? "#" + e.id : "")
  + ( e.className != "" ? "." + e.className.replace(' ','.') : "");

//now you can stringify your element to JSON string
var e_json = JSON.stringify({
  'element': e_str
})

than

//parse it back to an object
var obj = JSON.parse( e_json )

//finally connect the 'obj.element' varible to it's element
obj.element = document.querySelector( obj.element )

//now the 'obj.element' is the actual element and you can click it for example:
obj.element.click();

P
Peter Mortensen
new String(myobj)

If you want to serialize the whole object to string, use JSON.