I'm making an ajax get call that returns me contents of html page. I'm trying to select contents of the body
tag but my selector returns an empty jquery object.
$.get(filename, function(data) {
console.log($("body", data));
})
where data
is contents of html file.
jQuery cannot select body
of the response string, because the <body>
tag disappears when the string is converted using $()
.
Hence, you have to select the body from the data
string in another way, such as Regular expressions. Example:
$.get(filename, function(data) {
var body = data.replace(/^[\S\s]*<body[^>]*?>/i, "")
.replace(/<\/body[\S\s]*$/i, "");
//Optionally, convert the string to a jQuery object:
body = $(body);
console.log(body);
}))
Note: My Regular Expression assumed a wellformed HTML document, where >
are correctly shown using HTML entities. If this is not the case, more advanced RegExps has to be used, such as the ones shown at this question.
jQuery uses the document object model, not the "text" that makes up that model. You only have a big piece of text in the data element that hasn't been added to the document yet.
$(body).html(data);
... assuming the data contains valid body code. It it's an entire HTML page, then you'll need to parse it for just the body content, e.g. using indexOf or somesuch.