Зачистка подэлементов в HTML с помощью jQuery? - PullRequest
0 голосов
/ 19 августа 2011

В настоящее время я работаю над сценарием для извлечения некоторой базовой информации со страницы HTML. В частности, я пытаюсь получить некоторую информацию об артистах от allmusic.com. Я пишу этот сценарий в файле node.js, используя jQuery для фактической очистки, и работаю в определенной степени, используя примеры из этого сообщения в блоге .

То, что я пытаюсь сделать, - это запустить поиск по популярному исполнителю, а затем сохранить некоторую основную информацию о первом результате, который почти полностью будет исполнителем, которого я ищу. Я могу извлечь нужную таблицу, используя приведенный ниже код, но не могу понять, как получить первые пару td элементов из HTML, что мне действительно нужно сделать. Мой код node.js выглядит следующим образом:

var request = require('request'),
    jsdom = require('jsdom');

request({ uri:'http://allmusic.com/search/artist/lady+gaga' }, function (error, response, body) {

  jsdom.env({
    html: body,
    scripts: [
      'http://code.jquery.com/jquery-1.5.min.js'
    ]
  }, function (err, window) {
    var $ = window.jQuery;

    // jQuery is now loaded on the jsdom window created from 'agent.body'
    var search = $('.search-results').html();
    if(search != null){
      //gah what can i do here?!?
    }
  });
});

Ниже приведен фрагмент HTML-кода, так что вам не нужно искать его самостоятельно:

<table class="search-results" border="0" cellpadding="0" cellspacing="0" width="100%">
   <tr>
      <th class="relevance">
          <a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:relevance-asc" title="order by relevance">Relevance</a>
      </th>
      <th width="10px">&nbsp;</th>

      <th>
         <a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:name-asc" title="order by name">Name</a>
      </th>
      <th width="75px">
          <a href="http://www.allmusic.com/search/artist/lady gaga/filter:all/exact:0/order:genre-asc" title="order by genre">Genre</a>
       </th>
       <th width="200px">Years Active</th>

    </tr>

           ACTUAL RELEVANT STUFF THAT I WANT ARE BELOW

    <tr>
       <td class="relevance text-center">
           <div class="bar" style="width:100%" title="100%"></div>
       </td>
       <td class="text-center"></td>
       <td><a href="http://www.allmusic.com/artist/lady-gaga-p1055684">Lady Gaga</a></td>

        <td>Pop/Rock</td>   //SPECIFICALLY THIS
        <td>00s</td>
    </tr>

В этой таблице есть еще много записей, но это первый результат. Можно ли создать массив из тд или что-то в этом роде и просто получить правильный индекс? Это должен быть одинаковый индекс для каждого артиста, если я всегда получу первый результат.

Если это невозможно, есть ли другие способы достижения моей цели? В качестве альтернативы, есть ли лучшие способы сделать то, что я пытаюсь сделать с node.js? Я посмотрел на кучу разных вариантов, и это казалось самым простым.

С наилучшими пожеланиями,
Сами

1 Ответ

1 голос
/ 19 августа 2011

Вы можете использовать метод .siblings () для обхода элементов td.

См .: http://api.jquery.com/siblings/ Вы также можете получить все элементы td с помощью JQuery, который возвратит массив, и использоватьindex, как вы упомянули.

Селектор должен выглядеть примерно так:

var tds= $('.search-results tr td');

Это позволит получить все tds в таблице, поэтому вам придется умножить на количество столбцов.

var trs = $('.search-results tr');

Помните, что первый столбец содержит заголовок, а его нет в переменных tds.

Надеюсь, это поможет.

...