Сравнение разного содержимого одного Class
Доброго времени суток.
-Есть таблица, обернутая в уникальный id="statsent" -Есть в таблице даты, которые обернуты в class="staton" Даты есть как совпадающие так и разные! -Есть код (все условия в коде не прописываю, дабы не разводить воды, условия функционируют прекрасно): ------------------------------------------------
var x = $('.staton').html(); //дата статуса
if (x! > y){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(new RegExp($('.staton').html(),'g') , '<span style="color:red">Ожидается сегодня с ' + time0 +' </span> ');
}
//y - переменная с эталонной датой
//time0 - переменная на которую заменяется содержимое
------------------------------------------------ Код работает, но выявилась проблема - в class заменяются все совпадающие даты с первым class! Для наглядности: 1 <div class="staton">12.01.2014</div> 2 <div class="staton">25.03.2014</div> 3 <div class="staton">12.01.2014</div> Заменятся только 1 и 3, так как они похожи. Если сделать 2ю строку с датой 12.01.2014, то и она заменится. А нужно чтобы каждая дата сравнилась с текущей и заменилась по своему условию, которые уже есть. Что думаю: Выводя переменную ч/з alert(x); видно, что переменная записывается лишь один раз, ловя первое совпадение. и дальше заменяет все совпадения с этой переменной. Вопрос: Подскажите, как сделать чтобы каждая дата проверялась и заменялась по условию. |
Цитата:
|
Спасибо за подсказку. Но я уже больше часа сижу c each и как то не вяжется, кстати изначально я пробовал через each, даже match пытался приплести, но так как изучаю js недавно- результат при постановке each мне выдает такой, что каждый символ в Staton он заменяет на фразу, в итоге получается что у меня целая страница, состоящая из фраз.
Код удалил,вернулся к началу,
$(document).ready(function(){
$('.staton').each(function(){
});
});
Пробую обратиться через this, но он не обращается и я не могу найти результаты. Я понимаю что и как должно описываться, но с синтаксисом пока что проблемы, может быть кто-нибудь поможет преобразовать код под each? Есть еще пара нюансов Дата в staton выглядит так: 12.01.2014 13:00 либо так: 12.01.2014 с 14:00 Чтобы сравнить условия, я разбиваю дату и записываю их в переменную.
var x = $('.staton').html() //дата статуса
var time = x.split(' ')[1] || ''; // Время конца смены
var time0 = x.split('c ')[1] || ''; // Время конца смены если оффлайн
var dodate= x.split(' ',1) //Дата начала смены
var prodate= x.split('.20',1) //Дата начала смены
а после сравниваю отдельные части между собой и вывожу в результат. как вот это связать с each ума не приложу. Форумчане, выручайте... Я этот то код начинал писать до нового года... еще столько же мои нервы не выдержат... Пока что пытаюсь как могу. Заранее спасибо. |
Вот целиковый код:
function replace2(){
var x = $('.staton').html() //дата статуса
var y = $(".tim").html(); //время текущее
var a = "$DATE$" //Дата текущего времени
var time = x.split(' ')[1] || ''; // Время конца смены
var time0 = x.split('c ')[1] || ''; // Время конца смены если оффлайн
var dodate= x.split(' ',1) //Дата начала смены
var prodate= x.split('.20',1) //Дата начала смены
if (dodate+" c "+time0 == "$DATE$"+" c "+time0 && time0 > "$TIME$" ){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(new RegExp($('.staton').html(),'g') , '<span style="color:red">Ожидается сегодня с ' + time0 +' </span> ');
}
if (dodate+" c "+time0 == "$DATE$"+" c "+time0 && time0 < "$TIME$" ){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(new RegExp($('.staton').html(),'g') , '<span style="color:red">Оффлайн</span> ');
}
if (x!="$DATE$"+" c "+time0 && dodate==a&&x > y){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(RegExp($('.staton').html(),'g') , '<span style="color:green"><b>Онлайн до '+time+'</b></span>');
}
if (x!="$DATE$"+" c "+time0 && dodate==a&& x < y ){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(new RegExp($('.staton').html(),'g') , '<span style="color:red">Оффлайн</span> ');
}
if (dodate > a ){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(new RegExp($('.staton').html(),'g') , '<span style="color:red">Оффлайн до '+ prodate + ' ' + time0 +' </span> ');
}
if (dodate < a ){document.getElementById('statsent').innerHTML = document.getElementById('statsent').innerHTML.replace(new RegExp($('.staton').html(),'g') , '<span style="color:red">Оффлайн</span> ');
}
}
setTimeout("replace2();", 1000)
|
Elphet,
вы напишите что в начале на странице -- что должно быть потом и Пожалуйста, отформатируйте свой код! Для этого его можно заключить в специальные теги: js/css/html и т.п., например: [js] ... ваш код... [/js] О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting. |
Упрощенно что у меня на странице:
Пусть текущее время: 12.01.2014 12:00 <div id="statsent"> <table> <tr><td><span class="staton">12.01.2014 17:00</div></td></tr> <tr><td><span class="staton">13.01.2014 с 12:00</div></td></tr> <tr><td><span class="staton">11.01.2014 08:00</div></td></tr> <tr><td><span class="staton">12.01.2014 17:00</div></td></tr> </table> </div> "12.01.2014 17:00" больше текущего, значит "онлайн" "13.01.2014 с 12:00" больше текущего и есть между датой буква с, значит "оффлайн до 13.01 12:00" "11.01.2014 08:00" меньше текущего, значит "оффлайн" "12.01.2014 17:00" снова больше текущего, значит "онлайн" То есть что должно получиться <div id="statsent"> <table> <tr><td><span class="staton">Онлайн до 17:00</div></td></tr> <tr><td><span class="staton">Оффлайн до 13.01 12:00</div></td></tr> <tr><td><span class="staton">Оффлайн</div></td></tr> <tr><td><span class="staton">Онлайн до 17:00</div></td></tr> </table> </div> |
Попробуй так
function replace(elem){
var x = $(elem).html() //дата статуса
var y = $(".tim").html(); //время текущее
var a = "$DATE$" //Дата текущего времени
var time = x.split(' ')[1] || ''; // Время конца смены
var time0 = x.split('c ')[1] || ''; // Время конца смены если оффлайн
var dodate= x.split(' ',1) //Дата начала смены
var prodate= x.split('.20',1) //Дата начала смены
//Далее твои условия
}
$(function(){
$('.staton').each(function(){
replace(this);
});
});
|
Elphet,
<!DOCTYPE HTML>
<html>
<head>
<title>Untitled</title>
<meta charset="utf-8">
<script src="http://code.jquery.com/jquery-1.9.1.js"></script>
<script>
function replace(elem){
var x = $(elem).text() //дата статуса
var y = new Date(); //время текущее
x = x.match(/\S+/g);
var hours = x.pop();
var data = new Date(x[0].split('.').reverse().join('/')+ ' ' +hours)
var text = 'Оффлайн';
if (data.getTime() > y && x[1] != 'с') text = 'Онлайн до '+hours
if (data.getTime() > y && x[1] == 'с') text = 'Оффлайн до '+x[0].slice(0,5) + ' ' +hours;
$(elem).text(text)
}
$(function(){
$('.staton').each(function(){
replace(this);
});
});
</script>
</head>
<body>
<div id="statsent">
<table>
<tr><td><span class="staton">12.01.2014 17:00</span></td></tr>
<tr><td><span class="staton">13.01.2014 с 12:00</span></td></tr>
<tr><td><span class="staton">11.01.2014 08:00</span></td></tr>
<tr><td><span class="staton">12.01.2014 17:00</span></td></tr>
</table>
</div>
</body>
</html>
|
рони,только наверное без двойной конструкции $();
Хотя это не критично. |
Цитата:
|
| Часовой пояс GMT +3, время: 22:55. |