Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.01.2014, 14:22
Интересующийся
Отправить личное сообщение для Elphet Посмотреть профиль Найти все сообщения от Elphet
 
Регистрация: 11.01.2014
Сообщений: 19

Сравнение разного содержимого одного 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); видно, что переменная записывается лишь один раз, ловя первое совпадение. и дальше заменяет все совпадения с этой переменной.

Вопрос: Подскажите, как сделать чтобы каждая дата проверялась и заменялась по условию.

Последний раз редактировалось Elphet, 12.01.2014 в 16:20.
Ответить с цитированием
  #2 (permalink)  
Старый 12.01.2014, 14:28
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Elphet
$('.staton').
упрощённо это массив дат -- при запросе html(); отдаётся первое значение массива -- нужно проверить все используйте each -- ближайший пример тут
Ответить с цитированием
  #3 (permalink)  
Старый 12.01.2014, 15:57
Интересующийся
Отправить личное сообщение для Elphet Посмотреть профиль Найти все сообщения от Elphet
 
Регистрация: 11.01.2014
Сообщений: 19

Спасибо за подсказку. Но я уже больше часа сижу 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 ума не приложу.

Форумчане, выручайте...
Я этот то код начинал писать до нового года... еще столько же мои нервы не выдержат...
Пока что пытаюсь как могу. Заранее спасибо.

Последний раз редактировалось Elphet, 12.01.2014 в 16:20.
Ответить с цитированием
  #4 (permalink)  
Старый 12.01.2014, 16:01
Интересующийся
Отправить личное сообщение для Elphet Посмотреть профиль Найти все сообщения от Elphet
 
Регистрация: 11.01.2014
Сообщений: 19

Вот целиковый код:

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, 12.01.2014 в 16:07.
Ответить с цитированием
  #5 (permalink)  
Старый 12.01.2014, 16:04
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Elphet,
вы напишите что в начале на странице -- что должно быть потом и Пожалуйста, отформатируйте свой код!

Для этого его можно заключить в специальные теги: js/css/html и т.п., например:
[js]
... ваш код...
[/js]


О том, как вставить в сообщение исполняемый javascript и html-код, а также о дополнительных возможностях форматирования - читайте http://javascript.ru/formatting.
Ответить с цитированием
  #6 (permalink)  
Старый 12.01.2014, 16:15
Интересующийся
Отправить личное сообщение для Elphet Посмотреть профиль Найти все сообщения от Elphet
 
Регистрация: 11.01.2014
Сообщений: 19

Упрощенно что у меня на странице:
Пусть текущее время: 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>

Последний раз редактировалось Elphet, 12.01.2014 в 16:18.
Ответить с цитированием
  #7 (permalink)  
Старый 12.01.2014, 16:19
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

Попробуй так
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);
});
});
Ответить с цитированием
  #8 (permalink)  
Старый 12.01.2014, 16:51
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

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>

Последний раз редактировалось рони, 12.01.2014 в 17:32.
Ответить с цитированием
  #9 (permalink)  
Старый 12.01.2014, 17:14
Аватар для Zuenf
Кандидат Javascript-наук
Отправить личное сообщение для Zuenf Посмотреть профиль Найти все сообщения от Zuenf
 
Регистрация: 27.01.2012
Сообщений: 134

рони,только наверное без двойной конструкции $();
Хотя это не критично.
Ответить с цитированием
  #10 (permalink)  
Старый 12.01.2014, 17:33
Аватар для рони
Профессор
Отправить личное сообщение для рони Посмотреть профиль Найти все сообщения от рони
 
Регистрация: 27.05.2010
Сообщений: 33,064

Сообщение от Zuenf
без двойной конструкции $();
убрал
Ответить с цитированием
Ответ


Опции темы Искать в теме
Искать в теме:

Расширенный поиск