来自返回的H1标签的.find()文本

时间:2015-10-01 14:37:15

标签: jquery ajax dom

这应该很简单,但我似乎无法针对正确的元素。我已经从.ajax()帖子中返回了数据:

<!DOCTYPE HTML PUBLIC "-//IETF//DTD HTML 2.0//EN">
<html><head>
<title>302 Found</title>
</head><body>
<h1>Found</h1>
<p>blah blah blah</p>
</body></html>

我需要找到<h1>标签的内容,如果它===“发现”做某事,如果它!=“找到”做其他事情。

$.ajax({
    type:$('#Trial').attr('method'),
    url: form.action,
    data: dataString,
    dataType: "HTML",
    success: function(data){
      var answer = $(data).find('h1').text();
     if (answer==="Found") {
      modal.open({content: 'found ' + answer});
     } else {
      modal.open({content: 'not found ' + answer});
     }
    }
  });
  return false;
}

这是行不通的:'var answer = $(data).find('h1')。text();'我究竟做错了什么?谢谢!

3 个答案:

答案 0 :(得分:2)

假设你的ajax调用将html作为字符串返回。在使用jQuery.parseHTML()

使用jquery之前,需要先将其解析为html

答案 1 :(得分:2)

来自jQuery(html)文档:

  

如果HTML比没有属性的单个标签更复杂,那么   在上面的例子中,元素的实际创建是   由浏览器的.innerHTML机制处理。

     

...

     

如前所述,jQuery使用浏览器的.innerHTML属性进行解析   传递的HTML并将其插入当前文档。在这   过程中,某些浏览器过滤掉某些元素,例如<html>,   <title><head>个元素。结果,插入的元素可以   不能代表传递的原始字符串。

换句话说,您的$(data) 有一个<body>元素。你可以简单地使用:

$(data).filter('h1').text();

答案 2 :(得分:0)

如果你得到404,success函数永远不会触发。 另一件事是你返回DOM字符串:

   var answer = $(data).find('h1').text()

你需要这样做:

var answer = $.parseHTML( data )
answer.find("h1").text()