2009-10-16 3 views
1

Вот моя проблема: есть внутренняя система отслеживания проблем, у которой есть хорошая сводная страница (количество открытых проблем, разбитых разработчиком и т. Д.). Однако компактная сводная таблица окружена шаблоном (навигационное меню, окно поиска и т. д.). Я хотел бы вставить сводную таблицу на странице нашей команды, но не в окружение. Использование тега iframe <iframe> было бы тривиальным решением, если бы оно не было для крутильной области вокруг интересующей меня таблицы. К счастью, таблица HTML, о которой идет речь, хорошо очерчена: она определяется с помощью обычной таблицы < > и он даже имеет уникальный идентификатор, назначенный ему. Мне было интересно, был ли простой трюк JavaScript, связанный с манипуляциями DOM, которые я мог бы использовать для хирургического извлечения таблицы, в которой я заинтересован в iframe. Таким образом, отчет всегда будет обновляться, когда кто-то проверяет домашнюю страницу нашей команды.Скребок одной таблицы из HTML с использованием JavaScript

ответ

1

Если вы используете jQuery, вы можете легко вытащить код таблицы. Теперь, если таблица содержит небольшие блоки скриптов, все может стать странным; аналогично, если он полагается на некоторые таблицы стилей, убедитесь, что на целевой странице тоже есть те.

Стол окружен каким-то элементом уровня блока (или что-то еще)? Если это так, то вы можете загрузить страницу (AJAX или скрытый iframe), найти таблицу по «id», перейти к родительскому элементу и затем переместить его значение html() в целевой блок. Если для этого нет подходящего родителя уровня блока, вы можете попробовать восстановить пустой тег таблицы в пункте назначения, а затем вытащить html() из исходной таблицы и отбросить его туда; однако иногда все становится немного странным, потому что некоторые браузеры обрабатывают табличную структуру смешными способами. Могу работать.

+0

Это то, что я сделал, с дополнительным трюком загрузки вложения в трекер ошибок, чтобы мой JavaScript был отправлен из того же домена, что и итоговый отчет. –

0

Что-то простое для вас расширить?

function scrapeTable(tableId) 
     { 
      var tables = document.getElementsByTagName("table"); 
      for (var i = 0; i < tables.length; i++) 
      { 
       if (tables[i].id == tableId) 
       { 
        alert("<table>" + tables[i].innerHTML + "</table>"); 
       } 
      } 
     } 
+0

извинения за форматирование ... –

+0

Это работает, но «innerHTML()» таблицы выиграл 't включать сами теги таблицы. Это, вероятно, не огромная сделка, при условии, что браузеры в порядке, отбрасывая столовые кишки во вновь построенную (пустую) таблицу. – Pointy

1

Является ли команда и трекер на том же домене/адресе?

Если это не так, вам, вероятно, придется изменить отслеживание проблем, чтобы получить желаемый результат. Большинство браузеров не позволят вам изменять/получать доступ в разных доменах по соображениям безопасности.

Если они находятся на том же домене, то вы могли бы, вероятно, использовать нагрузку Jquery с селектором:

$("#destination").load("/path/to/table/ #tableid"); 
+0

Да, это действительно хорошая идея - я забыл о трюке селектора с load(). – Pointy

Смежные вопросы