Javascript.RU

Создать новую тему Ответ
 
Опции темы Искать в теме
  #1 (permalink)  
Старый 12.03.2011, 09:38
Новичок на форуме
Посмотреть профиль Найти все сообщения от vazerdim
 
Регистрация: 12.03.2011
Сообщений: 6

Оптимизировать код
Добрый день!

Прошу помочь произвести оптимизацию кода на jQuery. Только недавно начал изучать его. Есть таблица, с полем даты завершения. Необходимо в зависимости от текущей даты применять различные стили.

<script type="text/javascript">
    $(document).ready(
  function () {
      var systemDateArr = $("#SystemDate").text().split(".");
      var convertedSystemDate = Date.parse(systemDateArr[1] + '/' + systemDateArr[0] + '/' + systemDateArr[2]);

      var tr = $(".listtable tr").filter(function () {
          var endDate = $(this).children('td:nth-child(4)').text();
          if (endDate) {
              var endDateArr = endDate.split(".");
              var convertedEndDate = Date.parse(endDateArr[1] + '/' + endDateArr[0] + '/' + endDateArr[2]);

              [B]if (convertedEndDate > convertedSystemDate)[/B]
                  return false;
              else
                  return true;
          }
      }).addClass("PriorityTaskOverdue");
  }
);
</script>


В зависимости от условий сравнений мне приходиться каждый раз дублировать этот скрипт.
Ответить с цитированием
  #2 (permalink)  
Старый 12.03.2011, 10:15
Аспирант
Отправить личное сообщение для lalala Посмотреть профиль Найти все сообщения от lalala
 
Регистрация: 04.03.2011
Сообщений: 87

а можно пример таблички?
у вас для каждого из условий применяются разные стили или только один?

Последний раз редактировалось lalala, 12.03.2011 в 10:17.
Ответить с цитированием
  #3 (permalink)  
Старый 12.03.2011, 10:46
Новичок на форуме
Посмотреть профиль Найти все сообщения от vazerdim
 
Регистрация: 12.03.2011
Сообщений: 6

Стили разные.

<table class = "listtable">
            <tr>
                <th></th>
                <th>
                    Описание
                </th>
                <th>
                    Дата начала
                </th>
                <th>
                    Дата завершения
                </th>
                <th>
                    Фактическая дата
                </th>
                <th>
                    Процент завершения
                </th>
                <th>
                    Ответственные
                </th>
                <th>
                    Статус
                </th>
                <th>
                    Комментарии
                </th>
            </tr>
 
            <tr>    
                <td>
                    <a href="/TODOList/Details/11">Открыть</a>
                </td>
                <td>
                    Описание задачи
                </td>
                <td>
                    20.03.2011
                </td>
                <td>
                    02.01.2011
                </td>
                <td>
	        27.02.2011                
	     </td>
                <td>
                    100%
                </td>
                <td>
                    
                </td>
                <td>
                    Выполнено
                </td>
                <td>
                    Комментарии
                </td>
            </tr>
        </table>

Последний раз редактировалось vazerdim, 12.03.2011 в 10:49.
Ответить с цитированием
  #4 (permalink)  
Старый 12.03.2011, 11:58
Аспирант
Отправить личное сообщение для lalala Посмотреть профиль Найти все сообщения от lalala
 
Регистрация: 04.03.2011
Сообщений: 87

не совсем понял, что вы хотите сделать, но посмотрите вот этот вариант. возможно подойдет
$(document).ready(function () {
	var systemDateArr = $("#SystemDate").text().split(".");
	var convertedSystemDate = Date.parse(systemDateArr[1] + '/' + systemDateArr[0] + '/' + systemDateArr[2]);

	$(".listtable tr").each(function () {
		var obj = this
			endDate = $(obj).children('td:nth-child(4)').text();
		if (endDate){
			var	endDateArr = endDate.split("."),
			convertedEndDate = Date.parse(endDateArr[1] + '/' + endDateArr[0] + '/' + endDateArr[2]);
			
			checkDate(convertedEndDate,obj);
		};
	});
	
	function checkDate(convertedEndDate,obj) {
		if (/* условие*/ ){
			/*
				var ClassName;	// класс который хотите присвоить
			*/
			
			updateClass(obj,ClassName);
		};
	};
	
	function updateClass(obj,ClassName) {
		$(obj).addClass(ClassName)
	};
});
Ответить с цитированием
  #5 (permalink)  
Старый 13.03.2011, 12:02
Новичок на форуме
Посмотреть профиль Найти все сообщения от vazerdim
 
Регистрация: 12.03.2011
Сообщений: 6

Вроде разобрался как сделать, вот код:

<script type="text/javascript">
    $(document).ready(
  function () {
      var systemDateArr = $("#SystemDate").text().split(".");
      var convertedSystemDate = Date.parse(systemDateArr[1] + '/' + systemDateArr[0] + '/' + systemDateArr[2]);
      $(".listtable tr").filter(function () {

          var status = $(this).children('td:nth-child(6)').text();

          if (status) {
              var endDate = $(this).children('td:nth-child(4)').text();
              var endDateArr = endDate.split(".");
              var convertedEndDate = Date.parse(endDateArr[1] + '/' + endDateArr[0] + '/' + endDateArr[2]);

              if (status.match('100%')) {
                  $(this).children('td:nth-child(4)').css('background', '#33FF33');
                  return true;
              }
              else {
                  if (convertedEndDate < convertedSystemDate) {
                      $(this).children('td:nth-child(4)').css('background', '#F3665F');
                      return true;
                  }
                  if (convertedEndDate >= convertedSystemDate && convertedEndDate <= (convertedSystemDate + (7 * 24 * 3600 * 1000))) {
                      $(this).children('td:nth-child(4)').css('background', '#FFFF00');
                      return true;
                  }
              }
          }
      });
  }
);
</script>


Спасибо lalala
Ответить с цитированием
  #6 (permalink)  
Старый 13.03.2011, 12:19
Новичок на форуме
Посмотреть профиль Найти все сообщения от vazerdim
 
Регистрация: 12.03.2011
Сообщений: 6

Ещё не понял почему, но у меня работает только вариант с .css, а вот addClass работает только для всей строки, если вместо css сделать addClass, то не чего не происходит.
Ответить с цитированием
  #7 (permalink)  
Старый 14.03.2011, 11:03
Аспирант
Отправить личное сообщение для lalala Посмотреть профиль Найти все сообщения от lalala
 
Регистрация: 04.03.2011
Сообщений: 87

addClass добавляет стиль к элементу
Ответить с цитированием
  #8 (permalink)  
Старый 14.03.2011, 13:42
Интересующийся
Отправить личное сообщение для jura4x01 Посмотреть профиль Найти все сообщения от jura4x01
 
Регистрация: 11.11.2010
Сообщений: 29

Сообщение от lalala
addClass добавляет стиль к элементу
не стиль, а признак принадлежности к классу. опишите классы в css свойствах и с помощью addClass привязывайте их к нужным элементам.. ну и соответственно removeClass поможет эти связи устранить.
Ответить с цитированием
Ответ



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

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


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Как создать bodyclick код royksopp Общие вопросы Javascript 8 14.10.2011 16:39
Помогите код оптимизировать. Suharik Events/DOM/Window 2 27.05.2010 11:59
Opera отдаёт неправильный код функциональных клавиш. NT Man Opera, Safari и др. 1 19.01.2010 02:45
Помогите оптимизировать код. pizzZ jQuery 5 17.11.2009 23:52
Как узнать динамический код страницы? gosha13 Общие вопросы Javascript 5 27.07.2009 13:31