Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Вопрос новичка о нахождений значений (https://javascript.ru/forum/jquery/77086-vopros-novichka-o-nakhozhdenijj-znachenijj.html)

Jimy 23.03.2019 08:13

Вопрос новичка о нахождений значений
 
Добрый день! Есть таблица с расписанием рейсов, там указано время в виде 12:00,12:30,16:00 и т.д.
Также на страничке отображается текущее время в виде 12:00.
Как найти ближайший рейс? Я делаю так:
$('td:contains('+date_hour+')'), где переменная date_hour содержит текущее время. Получается, находит, но только когда точно совпадает. А надо немного по другому - найти все значения в таблице, которые больше текущего времени и указать самый первый (который меньше всех). Думаю, что как-то так. А как реализовать в коде, подскажите?
Спасибо!

рони 23.03.2019 08:55

Jimy,
:-?
for (var i = 0; i < tds.length; i++) {
    if(tds[i].time > now)  break;
}

Jimy 23.03.2019 09:56

Спасибо. Прошу прощения за тупость, но что такое tds? Явно какой-то массив, но откуда он?

рони 23.03.2019 10:01

Цитата:

Сообщение от Jimy
но что такое tds?

это массив ваших ячеек, пример демострирует только алгоритм поиска, конкретика зависит от вашей реализации.

Jimy 23.03.2019 10:30

Спасибо. В принципе, я так и думал: вытащить значения ячеек в массив и потом уже с ним и работать... Но вот интересно - а другого способа нет? Jquery не сможет найти нужные значения непосредственно из таблицы, без вспомогательных массивов, объектов и т.д.?

рони 23.03.2019 10:53

Цитата:

Сообщение от Jimy
вытащить значения ячеек

а зачем? не проще создать обьект(массив) с данными и работать с ним а не с html?
попробуйте создать, для начала, таблицу из массива.

Jimy 23.03.2019 11:05

Спасибо, буду пробовать!

Jimy 23.03.2019 12:15

А подскажите, в чем ошибка? Сделал так:
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?
Как правильно сравнить?
Спасибо.

Malleys 23.03.2019 12:33

<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>

Jimy 23.03.2019 13:07

Спасибо!


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