Управление таблицей
Доброго дня всем!
Програмлю на 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> как мне сымитировать нажатие в браузере или получить новый адрес для станицы, как будто я кликнул ссылку, а это возможно??? Заранее спасибо за помощь!!! |
Цитата:
(эту команду выполнить во фрейме) 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 получил уже другие данные, ну или как-то дать команду уже загруженой странице... |
Rik,
Если вам нужно вывести на начало таблицы - просто к тегу таблицы добавьте к ней любое ID <table id=MyId и его и пропишите в document.location.hash='MyId' |
Цитата:
|
Цитата:
Цитата:
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'; //ну тут делаю видимым мой фрейм.как то так.... |
Цитата:
проделываете операцию по скроллингу к краю таблицы и затем можно делать и програмный клик по элементу Для удобства работы из ява скрипт - у ссылок прописать 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() |
Цитата:
пишет ошибка "document.getElementById("my_frames").location is undefined" видать я накосячил, фрэйм мой объявлен как <div id="my_frames"> соответсвенно я получаю указатель на объект HTMLDivElement, а у него нет свойства location. Это свойство есть у объектов HTMLDocument, вот засада... по ходу проблема усложняется. |
Цитата:
Фокус в том что сайт мне формирует страницу как есть, без всяких id="Link1", т.е. я не могу получить Id строки значит и click() тоже не могу. Не знаю может бредово звучит, я нельзя как нибудь URL сформировать с этим кликом??? |
Полазив немного наткнулся на класс XMLHttpRequest, правда не знаю поддерживается он у меня или нет. А вот если через его метод open перидать клик???
|
Цитата:
|
Цитата:
Если я правильно понимаю ситуацию, что бы я получил свежие данные я должен дать новый URL и тогда ко мне прийдут новые данные. А иначе я все манипуляции провожу со своей копией. Развейти мои сомнения?! |
Цитата:
Если же хотите обновить текущую страницу, добавьте в ссылку параметр http://javascript.ru/forum/events/28921-upravlenie-tablicejj-2.html?refresh=1 хотя тогда вам проще без клика во фрейме устанавливать конкретный адрес: window.location = 'Ваша ссылка' |
Цитата:
Я так думаю, что это происходит из-за того что скрипт который парсит эту страницу не находится на самой странице, а запускается примерно как через cscript.exe. Цитата:
Почитал про call может она поможет? p.s. Спасибо за терпение и помощь!!! |
Rik,
1. alert (document.getElementById('Link1').innerHTML) - должен выдавать HTML контент данной ссылки - *данный скрипт с аллертом (как и с кликом) должен стоять на той же странице где и таблица Это есть ? (Если нет, значит Id=Link1 Вы не добавили т.е если таблица во фрейме, то и скрипт во фрейме |
Цитата:
* или можно даже менять адрес во фрейме с Главной страницы, - там по другому |
Цитата:
Нет этого нет, во фрейме у меня лежит весь html контент всей страницы целиком, конечно там и лежит таблица. Если брать пример с mail.ru, вся страница приходит ко мне, но там конечно нет моего скрипта, от куда он может взяться на mail.ru А Id=Link1 я добавил банально через document.getElementById('t_frames').innerHTML.repl ace('><a','><a id="Link1" href') (код примерный но смысл такой) специально для контроля делал alert(....ById('t_frames').innerHTML) и ничего, причём если не делать replace то команда ById('Link1').click() ругается на undefine а после replace уже ошибки нет. Цитата:
А если опять вернутся к mail.ru у них явно там есть какой нибудь клик, если это не сложно, покажите плиз на примере как кликнуть и результат клика получить в отдельном фрейме???? |
Цитата:
Цитата:
Единственное, что Вы можете менять ссылку c Главного окна на страницу во фрейме с помощью: <iframe id="t_frames" src="Ваша ссылка" > document.getElementById('t_frames').src='Новый Адрес' |
Цитата:
Хорошо а кликнуть из Главного окна во фрейме я могу или нет? |
Цитата:
Ежели для скрипта, Вы должны создать ручками массив этих ссылок и и подставлять значение в iframe src Ксать дали б ссылку на таблу на мейле, я думаю, что нашел бы ка выставить таблицу под верхний обрез |
Цитата:
Цитата:
Цитата:
Я бы дал ссылку на сайт, но это моего провайдера сайт, чужих не пускает, да и своих тоже не особо, если найду пример то кину сюда. Цитата:
а вот у меня мысль возникла, а можно указать свойство таблицы что бы она не перносила строки, а пусть строка уходит в право в бесконечность??? и ещё, у них текст в ячейке таблицы делиться как бы на два раздела: краткое(короткое) и подробное (длинное) между ними они ставят <br>, текст выглядит так: "ллалалалал <br>ууууууууууууууууууууууу ууууууууууууууууууууууууу уууу" вопрос есть такое свойство у таблицы что бы она показывала всё или только "лалалала" |
Цитата:
|
Цитата:
Но собственно всё вряд ли осуществимо через фрейм, нужно иметь свой прокси сервер |
Цитата:
:thanks: это навело на мысль, сделал как хотел, немного коряво, но почему то layout как то не так отработал как ожидалось, да и <br> игнорирует layout. а вот такой вопрос: я парсю таблицу средствами DOM, а может быть получить HTML контент таблицы и распарсить её как строку ну там через replace, indexof и т.д., что на ваш взгляд будет быстрей работать?! |
Цитата:
Через DOM вы можете получить контент последнего столбца, укоротить и воткнуть обратно, Средствами replace (без написания спец функций) это будет долго и нудно Но опять жа странно - Вы говорите что доступа к табле нет, поскольку она на майл.ру, и тут же говорите о кких то средствах DOM Или Вы сумели получать код страницы ? Или табла статическая и неизменная в исходнике ? |
Цитата:
маил.ру это так для примера написал, страница с которой я воюю другая. а что вы имеете ввиду под кодом - это HTML контент?! четвёртый мой пост это начало страницы. а средства DOM я это я так понял вот это: 1 API.putInnerHTML = 'http://demo_str.ru/?c=1'; //получаю всю страницу в свой фрейм 2 var table_temp = API.document.getElementById('block_data').getElementsByTagName('table')[0]; //получаю указатель на объект "таблица", но могу достучатся до любого объекта 3 .......// обработка таблицы 4 5 API.putInnerHTML = ' ';// типа очищаю фрейм 6 var temp_url = document.getElementById('block_data').innerHTML; //получаю блок с таблицей 7 API.putInnerHTML = temp_url; //заливаю на фрейм правленую таблицу 8 9 API.getElementById('my_frames').style.display = 'block'; //ну тут делаю видимым мой фрейм. этим кодом я лопачу страницу которая лежит во фрейме. или я напутал терминологию?! |
Rik,
1. API. - Ваша некая функция ? 2. Фрейм лежит на том же домене, что и Текущая страница? 3. Мне удобнее в jQuery, если установите библиотеку => <script type="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script> и выложите полный код таблицы могу распарсить её как удобно |
Цитата:
<div id="t_frame1" > </div> <div id="t_frame2" > </div> и т.д. так вот API это глобальный указатель на index.htm (я програмер на Си так что не обесутьте за терминологию:) ) что бы добраться до фрейма я делаю так API.document.frames.t_frames1.putInnerHTML = '<iframe id="info" src="http://mail.ru width="100" height="100"></iframe>''; всё после этой команды весь маил.ру у меня на фрэйме отобразился дальше если я например захочу получить HTML всей страницы делаю так API.document.frames.t_frame1.document.getElementsB yTagName('body')[0]innerHTML; а вот так я получаю указатель на свою таблицу var table_temp = API.document.frames.t_frames1.document.getElementB yId.('block_data').getElementsByTagName('table')[0]; ну и дальше table_temp.rows[1].style.color = 'green'; т.е. я так понимаю это есть DOM. ну и в index.htm я могу записать <link rel='stylesheet' type='text/css' href = 'css/Main.css'/> <script type="text/javascript" language="javascript" src='лалала query.min.js'></script> это я так понимаю тоже классическая форма записи как и везде. Так что вполне ваша задумка может сработать!!!!:yes: p.s. Сейчас на футбол, а завтра попробую всё оформить!!!! ещё раз огромное Спасибо за помощь!!!:thanks: |
Часовой пояс GMT +3, время: 01:49. |