Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Помогите доработать скрипт (https://javascript.ru/forum/jquery/22636-pomogite-dorabotat-skript.html)

jenya 27.10.2011 09:32

Помогите доработать скрипт
 
Здравствуйте.
Помогите пожалуйста доработать скрипт на сайте http://studyrussianinrussia.com/constructor на втором шаге (выбор даты записи).
Сейчас скрипт позволяет выбрать только любые понедельники любого месяца. А нужно, что бы можно было выбирать любой массив дат, который будет задаваться заранее, к примеру, 20 ноября 2011 г, 18 декабря 2011 г.
Вот сам код:

jQuery('#datepicker').datepicker({
changeMonth: true,
changeYear: true,
minDate: 0,
dateFormat: 'mm-dd-yy',
altField: '#constructor_depdate',
altFormat: 'dd-MM-yy',
showOtherMonths: true,
yearRange: '2010:2015',
onSelect: function() {
jQuery('#page_2 button.btn_next').removeAttr('disabled');
setTimeout('disableDays()', 1);
},
onChangeMonthYear: function() {
setTimeout('disableDays()', 1);
}
});
});

//disable unselectable days
function disableDays(){
exclude = '2';
jQuery('table.ui-datepicker-calendar tr').each(function(){
jQuery(this).find('td:not(:eq('+exclude+'))').
addClass('ui-datepicker-unselectable ui-state-disabled').
attr('onclick','return false;').find('a').
each(function(){
d = jQuery(this).text();
jQuery(this).replaceWith('<span class="ui-state-default">'+d+'</span>');
});
});
}

DjDiablo 28.10.2011 13:22

Примени к td фильтр

jenya 28.10.2011 14:51

К td не получится фильтр применить, т.к. в таблице содержатся даты предыдущих месяцев, следовательно, нумерация td от начала таблицы сбита.
Поэтому даже ни каких соображений у меня нет((

ksa 28.10.2011 14:58

jenya, ты бы напрягся хоть чуть-чуть... Да примерчик тестовый тут смастерил...

Или деньги начинай копить для оплаты решения твоей проблемы... ;)

jenya 28.10.2011 15:09

Не понял о чем ты...
Меня интересует обычный календарь, в котором нужно сделать активной только одну определенную дату.
Но так как в календаре отображаются числа не только активного месяца но и предыдущего и последующего, то нумерация ячеек в таблице сбита, то есть номер ячейки и число месяца расходятся, следовательно, у меня возникла сложность с написанием фильтра.
Мне нужна просто идея, а не реализация.
Спасибо

ksa 28.10.2011 15:19

Цитата:

Сообщение от jenya
у меня возникла сложность с написанием фильтра.
Мне нужна просто идея, а не реализация.

Идея любой фильтрации проста - нужно фильтровать "фильтруемое". :)

Например такое представление даты ДД.ММ.ГГГ особо не пофильтруешь по периоду...
А вот если представить дату как число (прошедших дней с какого-либо дня) - то число прекрасно "фильтруется в интервале" других двух чисел...

DjDiablo 28.10.2011 15:24

Я же подсказал уже
у тебя уже есть jQuery(this).find('td:not(:eq('+exclude+'))').
Замени на

// фильтр будет переберать всё что нашла операци find(td)
jQuery(this).find('td').filter(function(index){

        if ($(this.html()==13) return  false // в ячейки есть число 13, исключаем эту ячейку
                       else return true; // там какое то другое число, оставляем ячейку

       // Тоесть если вернёш false элемент исключится, true останется
       // данный пример исключит все клетки с числом 13
       })
.append("hello");// делаем чтонибудь с неисключёнными ячейками


В примере выше мы работает со значением 13, у тебя не одно значение а целый массив
Относительно поиска значения в массиве почитай это

jenya 31.10.2011 11:21

Такая комбинация не работает:
jQuery('table.ui-datepicker-calendar tr').each(function(){

jQuery(this).find('td').filter(function(index){
        if ($(this.html()==13) return  false
                       else return true;  
       })

.append("hello");

	});

DjDiablo 31.10.2011 11:27

if (
$(this.html()==13)
- скобку бы сюда ещё :)
return false
else return true;

jenya 31.10.2011 13:50

Че то не работает все равно фильтр.
Делаю, как ты сказал:
jQuery('table.ui-datepicker-calendar tr').each(function(){

		jQuery(this).find('td').filter(function(index){
				if ($(this.html())==13) return  false
							   else return true;  
			   })

		.

		addClass('ui-datepicker-unselectable ui-state-disabled').

		attr('onclick','return false;').find('a').

		each(function(){

			d = jQuery(this).text();

			jQuery(this).replaceWith('<span class="ui-state-default">'+d+'</span>');

		});

	});

Мне кажется ошибка в $(this.html())

Я еще вот этот фильтр нашел
jQuery(this).find('td:not(:contains(13))').
Может проще его использовать? Вот только если делать contains(2), то будет закрыта не только вторая ячейка, но и те, у которых в id есть цифра 2. Можно ли как то сделать строгое соответствие, через какие-нибудь спец символы?


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