jQuery .find() on data from .ajax() call is returning "[object Object]" instead of div
Trying to find div
element with id="result"
in returned data from .ajax()
using .find()
. Unfortunately, alert(result)
doesn't return div#result
.
Here is my code:
$.ajax({
url: url,
cache: false,
success: function(response) {
result = $(response).find("#result");
alert(response); // works as expected (returns all html)
alert(result); // returns [object Object]
}
});
Solution 1:
To answer your question specifically, it seems to be working correctly. You said that it returns [object Object]
, which is what jQuery will return with the find("#result")
method. It returns a jQuery element that matches the find
query.
Try getting an attribute of that object, like result.attr("id")
- it should return result
.
In general, this answer depends on whether or not #result
is the top level element.
If #result
is the top level element,
<!-- #result as top level element -->
<div id="result">
<span>Text</span>
</div>
<div id="other-top-level-element"></div>
find()
will not work. Instead, use filter()
:
var $result = $(response).filter('#result');
If #result
is not the top level element,
<!-- #result not as top level element -->
<div>
<div id="result">
<span>Text</span>
</div>
</div>
find()
will work:
var $result = $(response).find('#result');
Solution 2:
I just spent 3 hours to solve a similar problem. This is what worked for me.
The element that I was attempting to retrieve from my $.get
response was a first child element of the body tag. For some reason when I wrapped a div around this element, it became retrievable through $(response).find('#nameofelement')
.
No idea why but yeah, retrievable element cannot be first child of body... that might be helpful to someone :)
Solution 3:
try this:
result = $("#result", response);
btw alert
is a rough way to debug things, try console.log
Solution 4:
this is your answer:
<div class="test">Hello</div>
<div class="one">World</div>
The following jQuery Won't work:
$(data).find('div.test');
as the divs are top level elements and data isn't an element but a string, to make it work you need to use .filter
$(data).filter('div.test');
Another same question: Use Jquery Selectors on $.AJAX loaded HTML?