2012-02-20 78 views
2

我需要从任意网页中提取文本(只有纯文本)(我在服务器上绕过了一个简单的php代理的跨域问题)。 我做,像往常一样,jQuery:如何从页面获取文本?

$.get(url, function(data) { 
    process(data); 
}); 

,并在我的过程()函数我有网页的内容。 我想在该页面中考虑一个特定的div(这里是'#my-div'),或者如果不存在 - 作为后备 - 整个主体。

我愿做这样的事情:

function process(content) { 
    if ($(content).find('#my-div')) 
    $('#output').text($(content).find('#my-div').text()); 
    else 
    $('#output').text($(content).find('body').text()); 
} 

但我总赌注得到一个空的结果时,“发现”“体”:什么建议吗?

+0

如果要打印的内容的整个变量里面是什么东西?它有身体标签吗? – 2012-02-20 16:22:42

+0

我以前遇到过这个问题。在我的情况下,响应('内容')没有正确的xml格式;检查错误控制台(萤火虫/火狐)... – mshsayem 2012-02-20 16:24:22

+0

整个变量包含页面的全身,包括html标记,我想忽略... – MarcoS 2012-02-20 16:25:53

回答

3

有些问题......

function process(content) { 
    // The if() will always be true, because a jQuery object is always retruend 
    if ($(content).find('#my-div')) 
    $('#output') = $(content).find('#my-div').text(); // invalid assignment 
    else 
    $('#output') = $(content).find('body').text();  // invalid assignment 
} 

固定...

function process(content) { 
    var nodes = $(content); // cache the elements 
    if (nodes.find('#my-div').length) 
    $('#output').text(nodes.find('#my-div').text()); 
    else 
    $('#output').text(nodes.find('body').text());  
} 

现在理论上它似乎工作,但也有通过整个HTML文档问题到$函数。你会发现一些浏览器去掉了一些元素,如<head><body>

你最终需要测试每一种情况下,这样的事情...

function process(content) { 
    var nodes = $(content); // cache the elements 
    var my_div = nodes.find('#my-div'); // try to get nested #my-div 

    if(!my_div.length) { 
     my_div = nodes.filter('#my-div'); // try to get #my-div at top level 

     if(!my_div.length) { 
      my_div = nodes.find('body') // try to get nested body 

      if(!my_div.length) { 
       my_div = nodes; // assume the body content is at the top level 
      } 
     } 
    } 
    $('#output').text(my_div.text()); 
} 
+0

我正要指出你在最后一段中说了些什么。我认为一个解决方案就是简单地做:'content.text()' – powerbuoy 2012-02-20 16:26:56

+0

@powerbuoy:这可能有效。我想出了一个更长的解决方案,它仍在测试'#my-div'元素。我认为*它涵盖了所有浏览器。 – 2012-02-20 16:29:41

+0

谢谢。我对你的答案的第二行非常感兴趣:var content = $(content); //缓存元素 对不起,我不完全理解这一行;以及 - 如何将它用于缓存元素? – MarcoS 2012-02-20 16:32:20

0

您需要设置文本属性

$('#output').text($(content).find('#my-div').text()); 
else 
    $('#output').text($(content).find('body').text()); 
3

使用

if ($(content).find('#my-div').length) 

以查看是否有元素存在。