Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Trying to select a 'body' tag from html that is returned by get() request

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.

like image 367
dev.e.loper Avatar asked Dec 04 '22 19:12

dev.e.loper


2 Answers

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.

like image 159
Rob W Avatar answered Dec 08 '22 13:12

Rob W


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.

like image 20
Matt H Avatar answered Dec 08 '22 14:12

Matt H