Вопрос новичка о нахождений значений
Добрый день! Есть таблица с расписанием рейсов, там указано время в виде 12:00,12:30,16:00 и т.д.
Также на страничке отображается текущее время в виде 12:00. Как найти ближайший рейс? Я делаю так: $('td:contains('+date_hour+')'), где переменная date_hour содержит текущее время. Получается, находит, но только когда точно совпадает. А надо немного по другому - найти все значения в таблице, которые больше текущего времени и указать самый первый (который меньше всех). Думаю, что как-то так. А как реализовать в коде, подскажите? Спасибо! |
Jimy,
:-? for (var i = 0; i < tds.length; i++) { if(tds[i].time > now) break; } |
Спасибо. Прошу прощения за тупость, но что такое tds? Явно какой-то массив, но откуда он?
|
Цитата:
|
Спасибо. В принципе, я так и думал: вытащить значения ячеек в массив и потом уже с ним и работать... Но вот интересно - а другого способа нет? Jquery не сможет найти нужные значения непосредственно из таблицы, без вспомогательных массивов, объектов и т.д.?
|
Цитата:
попробуйте создать, для начала, таблицу из массива. |
Спасибо, буду пробовать!
|
А подскажите, в чем ошибка? Сделал так:
var arr = new Array(); $('#table3 td').each(function() { arr.push($(this).text()); }) ; alert(arr); alert (date_hour); for (var i = 0; i < arr.length; i++) { if(arr[i] > date_hour) alert(arr[i]); }; Массив получается. там значения 8:00,8:30,9:00 ....20:30, 21:00 Первый alert это показывает, все как надо. Далее, смотрим время. Допустим, 16:02. А вот третий alert будет выводить 17:00, потом 18 и т.д. А где 16:30? Как правильно сравнить? Спасибо. |
<html><head><style> span{font: bold 120% sans-serif; }</style></head><body> <script> var times = [ "8:00","8:30","9:00","9:30","10:00","10:30","11:00","11:30","12:00","12:30","13:00","13:30","14:00","14:30", "15:00","15:30","16:00","16:30","17:00","17:30","18:00","18:30","19:00","19:30","20:00", "20:30", "21:00"]; var html = ""; var now = new Date(); now = now.getHours() * 60 + now.getMinutes(); // сам алгоритм var nextTripFinded = false; for(var i = 0; i < times.length; i++) { var t = times[i].split(":"); var isFollowingTrip = t[0] * 60 + +t[1] > now; var s = isFollowingTrip ? '' : 'color: gray;'; if(!nextTripFinded && isFollowingTrip) { nextTripFinded=true; s += 'background:yellow;'; } if(s) s = 'style="' + s + '"'; html += '<span ' + s + '>' + times[i] + '</span> '; } // конец алгоритма document.body.innerHTML = html; </script></body></html> |
Спасибо!
|
А все-таки почему мой пример не работает? Почему не показывает значения типа "20:30"?
Ведь "20:30">"17:32" будет true. А показывает только "целые" значения. Подскажите, почему? (так, для интереса) |
Jimy,
потому что "время сейчас" у вас скорее всего число??? , а сравнение со строкой. alert("16:30" > "16"); //true alert("16:30" > 16); //false |
Вот, вроде работает:
var arr = new Array(); $('#table3 td').each(function() { arr.push($(this).text()); }) ; for (var i = 0; i < arr.length; i++) { arr[i]=$.trim(arr[i]); if(arr[i] > date_hour) break; }; $('td:contains('+arr[i]+')').css({'background-color':'#CFF4CF'}); |
И еще вопросик вдогонку. Есть таблица с тремя td. А как в тот же массив получить значения только из первых двух, игнорируя значения в третьем?
|
Цитата:
https://api.jquery.com/lt-selector/ |
Благодарю за полезные ссылки. Буду изучать:)
|
Вот теперь вопрос про селекторы. Попробую объяснить. Есть 2 таблицы (id='table3') и (id='opas') В первой 2 столбца, во второй 3. Выполняю подсветку времени рейсов, в первой все работает, во второй подсвечивается и третий столбец, а он не нужен. Исключаю его из выборки ;not(nth-child(3). И теперь в первой таблице подсвечивается значение, совпадающее со значением в первой... Вот сам код. Понимаю, что он кривой, прошу указать явную ошибку...
код: function clock() { var d = new Date(); var day = d.getDate(); var hours = d.getHours(); var minutes = d.getMinutes(); var seconds = d.getSeconds(); month=new Array("января", "февраля", "марта", "апреля", "мая", "июня", "июля", "августа", "сентября", "октября", "ноября", "декабря"); days=new Array("воскресенье", "понедельник", "вторник", "среда", "четверг", "пятница", "суббота"); if (day <= 9) day = "0" + day; if (hours <= 9) hours = "0" + hours; if (minutes <= 9) minutes = "0" + minutes; if (seconds <= 9) seconds = "0" + seconds; date_date = days[d.getDay()]+", "+day + " " + month[d.getMonth()] + " " + d.getFullYear() + " г. " ; date_time = hours + ":" + minutes + ":" + seconds+" "; date_hour=hours + ":" + minutes; if (document.layers) { document.layers.date.document.write(date_time); document.layers.date.document.close(); document.layers.time.document.write(date_time); document.layers.time.document.close(); } else { document.getElementById("date").innerHTML = date_date; document.getElementById("time").innerHTML = date_time; } //таблица обычных рейсов var arr = new Array(); $('#table3 td').each(function() { arr.push($(this).text()); }) ; arr.splice(arr.length-1, 1); for (var i = 0; i < arr.length; i++) { arr[i]=$.trim(arr[i]); if(arr[i] > date_hour) break; }; $('td:contains('+arr[i]+')').css({'background-color':'#CCFFCC'}); $('td:not(:contains('+arr[i]+'))').css({'background-color':'white'}); $('td:contains('+arr[i-1]+')').css({'background-color':'#99CCFF'}); $('#curtime').text(' Следующий рейс в '+arr[i]); $('#curtimenow').text(' Выполняется рейс на '+arr[i-1]+' '); if(arr[arr.length-1]<date_hour) {$('#curtime').text(' Следующий рейс в '+arr[0])}; /// // Таблица рейсов с опасным грузом var arr = new Array(); $('#opas td:not(:nth-child(3))').each(function() { arr.push($(this).text()); }) ; for (var i = 0; i < arr.length; i++) { arr[i]=$.trim(arr[i]); if(arr[i] > date_hour) break; }; $('td:contains('+arr[i]+')').css({'background-color':'#CFF4CF'}); if(arr[i] <= date_hour) $('td:contains('+arr[i]+')').css({'background-color':'white'});; // // setTimeout("clock()", 1000); } clock(); |
Все, вопрос снят! Вот олень, ведь в коде css не были прописаны id таблиц!
Теперь работает! |
Jimy,
Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [html run] ... минимальный код страницы с вашей проблемой [/html] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Часовой пояс GMT +3, время: 16:56. |