jQuery: как получить текст со страницы? - PullRequest
2 голосов
/ 20 февраля 2012

Мне нужно извлечь текст (только простой текст) с произвольной веб-страницы (я обхожу междоменную проблему с помощью простого 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 ]

3 голосов
/ 20 февраля 2012

Используйте

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

чтобы увидеть, существует ли элемент.

3 голосов
/ 20 февраля 2012

Некоторые проблемы ...

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
}

Fixed ...

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 голосов
/ 20 февраля 2012

Вам необходимо установить свойство текста

  $('#output').text($(content).find('#my-div').text());
else
  $('#output').text($(content).find('body').text());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...