Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Управление таблицей (https://javascript.ru/forum/events/28921-upravlenie-tablicejj.html)

Rik 07.06.2012 12:31

Управление таблицей
 
Доброго дня всем!
Програмлю на Java для удовольствия так что отношу себя к Новичкам.:)
Отличный форум, покурив его много чему научился!!!:thanks:
Есть такая проблемка, нужно скажем так распарсить страничку, на этой странице я выкусываю только таблицу. Что я сделал: загоняю адрес страницы в браузер, получаю указатель на таблицу, обрабатываю её, может коряво с точки зрения проф. но работает.
вот табличка
<div style="overflow: auto; height: 480px;" id="block_data">
  <table cellpadding="3" cellspacing="0" width="100%">
     <tr>
        <td class="chnow" align="center" valign="top">1111</td>
        <td class="chnow1" valign="top">aaaaaa</td>
    </tr>
    <tr>
         <td class="chnow" align="center" valign="top">2222</td>
         <td class="chnow1" valign="top">bbbbbb</td>
    </tr>
    <tr bgcolor="#efefef">
          <td class="chnow" align="center" valign="top">
               <a name="now" id="now">3333</a> </td>
          <td valign="top">cccc</td>
    </tr>
    <tr>
           <td class="chnow" align="center" valign="top">4444</td>
           <td valign="top">dddddddddddd</td>
    </tr>
     <tr>
             <td class="chnow" align="center" valign="top">5555</td>
             <td valign="top">eeeeeeeeeeeeee</td>
     </tr>
 </table>
</div>

вот код
var table_temp = document.getElementById('block_data').getElementsByTagName('table')[0];
var i=0;
for (; i < table_temp.rows.length; i++)
  {
    if (table_temp.rows[i].innerHTML.indexOf('id="now"') == -1)  table_temp.rows[i].style.color = 'grey'
      else 
       { 
           table_temp.rows[i].style.color = 'green';
           break;
       }
   }
table_temp.style.margin = -i*27 + 'px 0px 0px 0px ';
var temp_url = document.getElementById('block_data').innerHTML;

API.putInnerHTML = temp_url;

Вот тут появились первые грабли: обработанную таблицу я вставлю к себе во фрэйм, и хочу что бы "now" было на начало фрэйма, поэтому я margin сдвигаю таблицу в верх на "i" строк, но фрейм небольшой и если строки в таблице длинные то начинается перенос строк, ячейка становится больше одной строки и я не могу попасть точно на начало фрейма. Вообще возможно это сделать?

Вторые грабли, на странице есть такой код:
<table cellpadding="3" cellspacing="0" width="100%">
   <tr>
     <td class="th">
        <a href="#" onclick="xajax_xgetProg('126','0','1')" title>Пн</a></td>
    <td class="th">
         <a href="#" onclick="xajax_xgetProg('126','0','2')" title>Вт</a></td>
    <td class="th">
        <a href="#" onclick="xajax_xgetProg('126','0','3')" title>Ср</a></td>
  </tr>
 </table>

как мне сымитировать нажатие в браузере или получить новый адрес для станицы, как будто я кликнул ссылку, а это возможно???
Заранее спасибо за помощь!!!

Deff 07.06.2012 12:41

Цитата:

Сообщение от Rik
Вот тут появились первые грабли: обработанную таблицу я вставлю к себе во фрэйм, и хочу что бы "now" было на начало фрэйма, поэтому я margin сдвигаю таблицу в верх на "i" строк, но фрейм небольшой и если строки в таблице длинные то начинается перенос строк, ячейка становится больше одной строки и я не могу попасть точно на начало фрейма. Вообще возможно это сделать?

Поставьте скрытый якорь на нужную строку таблицы и добавьте его к адресу фрейма после вставки таблы
(эту команду выполнить во фрейме)
document.location.hash='Letter-Start'
в Качестве якоря может выступить id элемента обрамляющего строку или слово
к примеру: <span id=Letter-Start>Тут далее строка

Deff 07.06.2012 12:45

Цитата:

Сообщение от Rik
как мне сымитировать нажатие в браузере или получить новый адрес для станицы, как будто я кликнул ссылку, а это возможно???
Заранее спасибо за помощь!!!

Тут зависит от того где расположен код для клика - во фрейме или на главной, На главной процедура осложнена - нужно дождаться события загрузки фрейма и вставки таблы

Rik 07.06.2012 13:41

Цитата:

Сообщение от Deff (Сообщение 179722)
Поставьте скрытый якорь на нужную строку таблицы и добавьте его к адресу фрейма после вставки таблы
(эту команду выполнить во фрейме)
document.location.hash='Letter-Start'
в Качестве якоря может выступить id элемента обрамляющего строку или слово
к примеру: <span id=Letter-Start>Тут далее строка

если я правильно понял, то надо так:

table_temp.rows[i].span= 'Letter-Start'; //добавляю якорь

а вставку таблицы во фрейм с якорем делаю так:

API.document.frames.my_frames.putInnerHTML = document.getElementById('block_data').InnerHTML.document.location.hash='Letter-Start'


Цитата:

Тут зависит от того где расположен код для клика - во фрейме или на главной,
хмммм плаваю в терминологи...:(
вот грубо говоря адрес страницы http://demo_str.ru/?c=1 я делаю у себя .....putInnerHTML = 'http://demo_str.ru/?c=1 '; ну и там через секунду вся страница у меня и совсеми теми кликами что я приводил
вот заголовок это страницы:
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<html>

<head>
<title>Demo</title>
<meta http-equiv="Cache-Control" content="must-revalidate">
<meta http-equiv="Cache-Control" content="no-cache">
<meta http-equiv="Cache-Control" content="max-age=0">
<meta http-equiv="Prizma" content="no-cache">
<meta http-equiv="Expires" content="0">
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<script type="text/javascript">
var xajaxRequestUri="ajax.php";
var xajaxDebug=false;
var xajaxStatusMessages=true;
var xajaxWaitCursor=true;
var xajaxDefinedGet=0;
var xajaxDefinedPost=1;
var xajaxLoaded=false;
function xajax_xgetProg(){return xajax.call("xgetProg", arguments, 1);}
function xajax_xgetNow(){return xajax.call("xgetNow", arguments, 1);}
	</script>
<script type="text/javascript" src="Demo_files/xajax.js"></script>
<script type="text/javascript">
window.setTimeout(function () { if (!xajaxLoaded) { alert('Error: the xajax Javascript file could not be included. Perhaps the URL is incorrect?\nURL: /js/xajax.js'); } }, 6000);
	</script>
</head>
..... и т.д.

насколько я тут вычитал это библиотека Аякс и мне надо так URL сделать что бы я через putInnerHTML получил уже другие данные, ну или как-то дать команду уже загруженой странице...

Deff 07.06.2012 14:34

Rik,
Если вам нужно вывести на начало таблицы - просто к тегу таблицы
добавьте к ней любое ID
<table id=MyId
и его и пропишите в
document.location.hash='MyId'

Deff 07.06.2012 14:37

Цитата:

Сообщение от Rik
Тут зависит от того где расположен код для клика - во фрейме или на главной

Куда вы хотите вставить полученные/обработанные данные таблицы ?

Rik 07.06.2012 15:10

Цитата:

Сообщение от Deff (Сообщение 179756)
Rik,
Если вам нужно вывести на начало таблицы - просто к тегу таблицы
добавьте к ней любое ID
<table id=MyId
и его и пропишите в
document.location.hash='MyId'

ага понял сейчас попробую, а вот у меня есть id="now" его можно использовать для hash?

Цитата:

Куда вы хотите вставить полученные/обработанные данные таблицы ?
фактически это выглядит так:

API.putInnerHTML = 'http://demo_str.ru/?c=1'; //получаю всю страницу в свой фрейм
var table_temp = API.document.getElementById('block_data').getElementsByTagName('table')[0]; //получаю указатель на объект "таблица", но могу достучатся до любого объекта
.......// обработка таблицы

API.putInnerHTML = ' ';// типа очищаю фрейм
var temp_url = document.getElementById('block_data').innerHTML; //получаю блок с таблицей
API.putInnerHTML = temp_url; //заливаю на фрейм правленую таблицу 

API.getElementById('my_frames').style.display = 'block'; //ну тут делаю видимым мой фрейм.
как то так....

Deff 07.06.2012 15:45

Цитата:

Сообщение от Rik
//ну тут делаю видимым мой фрейм

Ну вот перед видимостью

проделываете операцию по скроллингу к краю таблицы
и затем можно делать и програмный клик по элементу

Для удобства работы из ява скрипт - у ссылок прописать id

<table cellpadding="3" cellspacing="0" width="100%">
   <tr>
     <td class="th">
        <a id="Link1" href="#" onclick="xajax_xgetProg('126','0','1')" title>Пн</a></td>
    <td class="th">
         <a id="Link2" href="#" onclick="xajax_xgetProg('126','0','2')" title>Вт</a></td>
    <td class="th">
        <a id="Link3" href="#" onclick="xajax_xgetProg('126','0','3')" title>Ср</a></td>
  </tr>
 </table>


Cам вызов

document.getElementById('Link1').click()

Rik 07.06.2012 16:25

Цитата:

Сообщение от Deff
Ну вот перед видимостью

не работает...:(
пишет ошибка "document.getElementById("my_frames").location is undefined"
видать я накосячил, фрэйм мой объявлен как <div id="my_frames"> соответсвенно я получаю указатель на объект HTMLDivElement, а у него нет свойства location.
Это свойство есть у объектов HTMLDocument, вот засада... по ходу проблема усложняется.

Rik 07.06.2012 17:30

Цитата:

Сообщение от Deff (Сообщение 179794)
Cам вызов

document.getElementById('Link1').click()

и это не заработало....:(
Фокус в том что сайт мне формирует страницу как есть, без всяких id="Link1", т.е. я не могу получить Id строки значит и click() тоже не могу.

Не знаю может бредово звучит, я нельзя как нибудь URL сформировать с этим кликом???


Часовой пояс GMT +3, время: 18:25.