Javascript-форум (https://javascript.ru/forum/)
-   Элементы интерфейса (https://javascript.ru/forum/dom-window/)
-   -   редактирование элемента по id (https://javascript.ru/forum/dom-window/4305-redaktirovanie-ehlementa-po-id.html)

sat-lin 10.07.2009 09:50

редактирование элемента по id
 
Уважаемые камрады подсобите советом!:help:
В двух словах есть сформированная страничка html
В ней по мимо всякой лабуды есть таблица без имени, но с id! В нее заполняются какие либо данные! При ентом у каждой строчки есть ячейка с датой! А теперь вопрос на засыпку!!!
Как можно средствами JS сделать поиск в таблице по дате, что бы в итоге нужные мне строчки исчезали! :cray:

Riim 10.07.2009 10:43

Наброски:
var date = new Date(), trs = table.getElementsByTagName('tr'), i = trs.length;
while (i) {
	var td = trs[--i].getElementsByTagName('td')[10];
	if (Date.parse(td.innerHTML) == date) td.parentNode.removeChild(td);
}


Вот еще: http://webew.ru/articles/598.webew

[off]
Я только что узнал, что есть тег <u>
Странно что здесь: http://htmlbook.ru/html/ про него ни слова.
[/off]

Snowcore 10.07.2009 10:48

Советую вам использовать jQuery.

Для ячейки с датой задайте какой-либо класс, например date

<td class="date">...

А также записывайте дату в атрибут title ячейки.

Искать ячейку можно при помощи селектора jQuery (получаем ячейку с искомой датой):
$('td.data[title="дата_для_поиска"]')


Можно удалить целую строку - обращаемся к родительскому элементу:

$('td.data[title="дата_для_поиска"]').parent().remove();

Riim 10.07.2009 10:49

Цитата:

Сообщение от Snowcore
Советую вам использовать jQuery.

А я для этой задачи !не! советую.

Цитата:

Сообщение от Snowcore
Для ячейки с датой задайте какой-либо класс, например date

Так совсем не интересно становится.

Цитата:

Сообщение от Snowcore
А также записывайте дату в атрибут title ячейки.

Мега-велосипедище.

Kolyaj 10.07.2009 10:58

Цитата:

Сообщение от Snowcore
А также записывайте дату в атрибут title ячейки.

Для привязки данных к тегу лучше всего использовать атрибут onclick. Можно, конечно, любой другой onsomething, но onclick универсальнее. Это, во-первых, валидно, во-вторых, кроссбраузерно, в-третьих, не надо ничего парсить.

<div id="my" onclick="return {data: 'Любые данные в формате json.'}">Блок с данными.</div>

alert(document.getElementById('my').onclick().data);

Snowcore 10.07.2009 11:05

Цитата:

Сообщение от Kolyaj (Сообщение 24082)
Для привязки данных к тегу лучше всего использовать атрибут onclick. Можно, конечно, любой другой onsomething, но onclick универсальнее. Это, во-первых, валидно, во-вторых, кроссбраузерно, в-третьих, не надо ничего парсить.

<div id="my" onclick="return {data: 'Любые данные в формате json.'}">Блок с данными.</div>

alert(document.getElementById('my').onclick().data);

Здорово! Первый раз вижу такой подход! Я обычно использовал title, или подобные валидные атрибуты

Riim 10.07.2009 11:06

Я не понимаю, зачем дублировать данные?

sat-lin 10.07.2009 11:07

Вы не совсем поняли дело в том что я могу немного редактировать только эту страницу! Таблица генерится вообще отдельной программой. Я не могу изменять свойства таблицы и ее содержимое.

Riim 10.07.2009 11:10

Цитата:

Сообщение от sat-lin
Я не могу изменять свойства таблицы и ее содержимое.

Да они что-то лишнее выдумывают, уже для себя наверно.

[off]
скажите мне кто-нибудь: тег <u> нормально использовать?

[/off]

Snowcore 10.07.2009 11:12

Цитата:

Сообщение от Kolyaj (Сообщение 24082)
Для привязки данных к тегу лучше всего использовать атрибут onclick.

Кстати, есть еще один способ, но его можно использовать только при помощи js:
у jQuery есть плохо документированный метод data, при помощи которого можно присвоить элементу собственные аттрибуты:

$(elem).data('myAttr', 'myValue');

Kolyaj 10.07.2009 11:14

Цитата:

Сообщение от Riim
Я не понимаю, зачем дублировать данные?

В атрибуте нужно передавать данные, удобные для обработки скриптом. В данном случае, например, timestamp. Это хоть и дублирование, но не при хранении данных, а при отображении. И это дублирование позволяет сильно упростить код, особенно если параметров много.

Snowcore 10.07.2009 11:16

Цитата:

Сообщение от Kolyaj (Сообщение 24091)
В атрибуте нужно передавать данные, удобные для обработки скриптом. В данном случае, например, timestamp. Это хоть и дублирование, но не при хранении данных, а при отображении. И это дублирование позволяет сильно упростить код, особенно если параметров много.

Абсолютно согласен с Kolyaj!

Riim 10.07.2009 11:17

Цитата:

Сообщение от Kolyaj
И это дублирование позволяет сильно упростить код

А что упрощать? У меня три строчки кода. Я не вижу причин !в данном случае! использовать какие-либо атрибуты, классы, онклики и т. д.

Riim 10.07.2009 11:17

Цитата:

Сообщение от Snowcore
Абсолютно согласен с Kolyaj!

А что курили то?

Kolyaj 10.07.2009 11:18

Цитата:

Сообщение от Snowcore
у jQuery есть плохо документированный метод data, при помощи которого можно присвоить элементу собственные аттрибуты

Любому объекту в JavaScript можно присвоить собственные атрибуты. JQuery тут не нужен.

Цитата:

Сообщение от Riim
Да они что-то лишнее выдумывают, уже для себя наверно.

У ТС одна из тех простых задач, которые требуют непропорционально много кода. :) Ему всего лишь нужно изучить http://javascript.ru/tutorial/dom .

Цитата:

Сообщение от Riim
скажите мне кто-нибудь: тег <u> нормально использовать?

А что плохого в теге u?

Kolyaj 10.07.2009 11:19

Riim,
я про onclick писал не конкретно к этому случаю, а в общем.

Snowcore 10.07.2009 11:22

Цитата:

Сообщение от Riim (Сообщение 24094)
А что курили то?

Я не курю, а то что я согласен с нормальным мнением другого человека - это не значит что я обкурился

Riim 10.07.2009 11:24

Цитата:

Сообщение от Kolyaj
А что плохого в теге u?

Я не видел его ни в одном справочнике по html.

Snowcore 10.07.2009 11:25

Цитата:

Сообщение от Riim (Сообщение 24099)
Я не видел его ни в одном справочнике по html.

The u element is deprecated.
http://www.w3schools.com/tags/tag_u.asp

Riim 10.07.2009 11:29

Цитата:

Сообщение от Snowcore
Я не курю, а то что я согласен с нормальным мнением другого человека - это не значит что я обкурился

Да я не говорю что это мнение не нормальное, я и сам вовсю использую атрибуты (люблю не валидные), просто в определенный момент создалось впечатление, что все на полном серьезе хотят это здесь использовать.

Snowcore,
спрашивая "что курили" я не хотел обидеть или что-либо в этом духе. Нужно воспринимать исключительно с положительной стороны.

Riim 10.07.2009 11:48

Snowcore, спасибо за ссылку.

Цитата:

Tip: Do not underline text! A user can confuse it with a hyperlink!
В общем, не буду я вообще такой bb-тег делать. А то совсем на ссылку похоже будет, они у меня никак не подсвечиваются, только подчеркиваются.

Snowcore 10.07.2009 11:52

Цитата:

Сообщение от Riim (Сообщение 24101)
Snowcore,
спрашивая "что курили" я не хотел обидеть или что-либо в этом духе. Нужно воспринимать исключительно с положительной стороны.

no problem :)

sat-lin 10.07.2009 14:31

Господа вы что то совсем от темы ушли!
Частично придумал как енто сделать, но что то не фурычит!
Если не сложно подскажите где лопухнулся, я в JS совсем новичек:(
<table id="tableId" border="1">
<tr>
<td>10.02.2009</td>
<td> Правельные год</td>
</tr>
<tr>
<td>10.03.2008</td>
<td>Не правильный год</td>
</tr>
<tr>
<td>20.12.2005</td>
<td>Совсем не правильный год</td>
</tr>
</table>
<input type="button" value="кнопко" onclick="del();">
<script language="javascript">
function del(){
var date = new Date();
month = date.getMonth() + 1; // правильный месяц
var datenow = date.getDate() + "." + month + "." + date.getYear(); // текущая дата в нужном формате

var table = document.getElementById("tableId");
var trs = table.getElementsByTagName("tr"); // все ячейк
var i = trs.length;

while (i) {
var td = table.trs[--i].getElementsByTagName('td');

window.alert(trs.innerHTML);
window.alert(td.innerHTML);

if (Date.parse(td.innerHTML) < 10.02.2009) tr.parentNode.removeChild(tr);

}
i++;
}

Photon 11.07.2009 12:34

Для начала: нафига последнее i++?
Затем: А кто сказал, что Date.parse() нормально работает со строкой типа '10.02.2009'?
И третье: не совсем правильный подход к написанию скрипта..
function del(){
    var date = new Date();
    var Months = ['Jan', 'Feb', 'Mar', 'Apr', 'May', 'Jun', 'July', 'Aug', 'Sep', 'Oct', 'Nov', 'Dec'];
    var table = document.getElementById("tableId");
    var trs = table.getElementsByTagName("tr"); // все строки
    var i = trs.length;
    while (i) {
        var td = trs[--i].getElementsByTagName('td');
        var cnt = td.length;
        for (var j = 0; j < cnt; j++) {
        	var data = td[j].innerHTML;
        	var data_arr = data.split('.');
        	if (data_arr.length > 0) {
        		m = Months[data_arr[1] - 1];
        		d = data_arr[0];
        		y = data_arr[2];
        		alert('date = ' + d + ' ' + m + ' ' + y + ' parse = ' + Date.parse(d + ' ' + m + ' ' + y));
        		alert(date.getTime());
                if (Date.parse(d + ' ' + m + ' ' + y) < date.getTime()) {
                    table.deleteRow(i);
                    break;
                }
            } 
        }
    }
}


Вот как-то так. Это работает и все удаляет как надо.. Все строки, в которых дата меньше сегодняшней.. Я думаю, переделать под нужную дату труда уже не составит

Riim 11.07.2009 14:55

Цитата:

Сообщение от Photon
А кто сказал, что Date.parse() нормально работает со строкой типа '10.02.2009'?

А кто пояснял, какая там строка?

Цитата:

Сообщение от Photon
for (var j = 0; j < cnt; j++) {

Кто вообще сказал, что искать нужно во всех столбцах ?

sat-lin 13.07.2009 14:34

!!!!ВСЕМ ОГРОМАДНОЕ СПАСИБО!!!!

Photon 13.07.2009 15:14

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


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