jQuery:如何从页面获取文本?

时间:2012-02-20 16:18:19

标签: jquery text

我需要从任意网页中提取文本(只有纯文本)(我的服务器上使用简单的php代理绕过了跨域问题)。 我像往常一样,

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

并且,在我的process()函数中,我有页面的内容。 我想在那个页面中考虑一个特定的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());
}

但是我总是打赌在找到“身体”时得到一个空洞的结果:任何建议?

3 个答案:

答案 0 :(得分:3)

使用

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

查看元素是否存在。

答案 1 :(得分: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());   
}

答案 2 :(得分:0)

您需要设置文本属性

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