2014-01-10 43 views
4

我使用Chrome扩展程序锻炼,我使用Ajax请求从请求的URL获取HTML。这有效,但我想要获得所有文本值的某些元素。举例,一切都与类.heading-bold

的script.js为什么我无法在jQuery中解析Ajax html GET响应?

$.ajax({ 
     url: "http://page.com/page.html", 
     type: "GET", 
     dataType: "html", 
      success: function(data) { 
       console.log($(data).filter('.heading_bold').text()); 
      } 
    }); 

响应HTML

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
    <html xmlns="http://www.w3.org/1999/xhtml"> 
    <head><title>Beerpong</title> 
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
    <meta http-equiv="Expires" content="0" /> 
    <meta http-equiv="Pragma" content="no-cache" /> 
    <meta http-equiv="Cache-Control" content="no-cache" /> 
    </head> 
    <body> 
     <div id="table-container"> 
      <table> 
       <tbody> 
        <tr> 
        <td><div class="heading_bold">Beerpong</div></td> 
        </tr> 
       </tbody> 
      </table> 
     </div> 
    </body> 
    </html> 

它登录到控制台的工作就好了。这是我的输出:

Uncaught Error: Syntax error, unrecognized expression: <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0.... 

为什么?为什么不只是console.log我想要的值?

+4

_不是语法错误的原因,但您的选择器需要是''.heading_bold'',而不是'#heading_bold''。 – nnnnnn

+1

@nnnnnn错误,但仍然抛出erorr:“未捕获的错误:语法错误,无法识别的表达式:<!DOCTYPE ...” – Jack

回答

16

如果您使用jQuery 1.9,这样做:

... 
success: function(data) { 
    var html = $.parseHTML(data); 
    console.log($(html).find('.heading_bold').text()); 
} 
.. 

因为按照jQuery 1.9 ::传递给jQuery的()HTML字符串比一个小于字符将被解释为选择其他的东西开始。由于字符串通常不能被解释为选择器,最可能的结果将是Sizzle选择器引擎抛出的“无效选择器语法”错误。使用jQuery.parseHTML()来解析任意的HTML。

+1

尝试了您的代码段,现在我得到一个空输出。而且我已经仔细检查了元素是否存在以及它的语法是否正确。它应该是,但只是一个空输出。 – Jack

+1

@Jack尝试使用.find()而不是.filter() –

+0

啊!最后,欢呼! – Jack

1

如果您想要将远程文档的一部分插入DOM,也许您可​​以尝试使用“load”而不是“$ .get()”。

$("#result").load("page.html .heading_bold",function(response){ 
console.log($(this).find(".heading_bold").val());   
}); 

希望这对你有帮助。

+0

这是一个跨域请求,“load”不会做这个工作。 – Jack

+0

$ .ajax调用仍然存在跨域问题...对吗?只是好奇...你用什么策略来克服跨域问题? CORS或代理? – Chickenrice

+0

我使用一个通过目标隧道的PHP代理 – Jack