来自.ajax()调用的数据的jQuery .find()返回"[object Object]"而不是div

Men*_*sch 50 ajax jquery find

试图找到div元素与id="result"从返回的数据.ajax()使用.find().不幸的是,alert(result)不归div#result.

这是我的代码:

$.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]
    }
});
Run Code Online (Sandbox Code Playgroud)

Ste*_*ins 104

要具体回答您的问题,它似乎正常工作.你说它返回了[object Object],这是jQuery将使用该find("#result")方法返回的内容.它返回一个与find查询匹配的jQuery元素.

尝试获取该对象的属性,比如result.attr("id")- 它应该返回result.


一般来说,这个答案取决于是否#result是顶级元素.

如果#result是顶级元素,

<!-- #result as top level element -->
<div id="result">
  <span>Text</span>
</div>
<div id="other-top-level-element"></div>
Run Code Online (Sandbox Code Playgroud)

find()不管用.相反,使用filter():

var $result = $(response).filter('#result');
Run Code Online (Sandbox Code Playgroud)

如果#result不是顶级元素,

<!-- #result not as top level element -->
<div>
  <div id="result">
    <span>Text</span>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)

find() 将工作:

var $result = $(response).find('#result');
Run Code Online (Sandbox Code Playgroud)

  • 所以这将永远有效.$( "<DIV>" +响应+ "</ DIV>")找到( '#结果'); (4认同)

Liv*_*rce 28

我花了3个小时来解决类似的问题.这对我有用.

我试图从我的$.get响应中检索的元素是body标签的第一个子元素.出于某种原因,当我在这个元素周围包裹一个div时,它变得可以通过$(response).find('#nameofelement').

不知道为什么,但是,可回收的元素不能成为身体的第一个孩子...这可能对某人有帮助:)

  • 实际上我认为这应该被证实是正确的答案 (2认同)

ant*_*paw 20

试试这个:

result = $("#result", response);
Run Code Online (Sandbox Code Playgroud)

btw alert是一种调试方式的粗略方法,试试吧console.log


Bảo*_*Nam 8

这是你的答案:

<div class="test">Hello</div>
<div class="one">World</div>    
Run Code Online (Sandbox Code Playgroud)

以下jQuery不起作用:

$(data).find('div.test');    
Run Code Online (Sandbox Code Playgroud)

因为div是顶级元素而数据不是元素而是字符串,要使其工作,您需要使用.filter

$(data).filter('div.test');    
Run Code Online (Sandbox Code Playgroud)

另一个相同的问题: 在$ .AJAX加载的HTML上使用Jquery选择器?


小智 6

别忘了用解析html来做.喜欢:

$.ajax({
    url: url, 
    cache: false,
    success: function(response) {
        var parsed = $.parseHTML(response);
        result = $(parsed).find("#result");
    }
});
Run Code Online (Sandbox Code Playgroud)

必须工作:)