пятница, 5 декабря 2008 г.

JavaScript url parser

Сегодня пришлось создавать решение которое включало в себя приведенный ниже код, в принципе это все можно было сделать и на сервере, но надо.

В чем особенность смотрите в комментариях к функциям, мои замечания для блога выделены жирным.

<script type="text/javascript">
// внимание данный скрипт должен быть вставлен ПОСЛЕ !!! формы вывода
/* Сдвигаем дату на указанное количество дней

params:
date a Date object
shift a day count offset
*/
function GetTimeShift(date,shift )
{
var g = new Date(date.toDateString());
g.setHours(shift * 24);
return g.toLocaleDateString();
}
/*

Тут все просто в страничке динамически созданной сервером ищем поля ввода и устанавливаем нужные нам значения (кстати по id не ищу исменно по тому что страница может быть, и будет развернута не один раз)
Установка значений при инициализации текстовых боксов.
Параметры:
date дата и время начала отсчета в формате строки
plane - сдвиг для планируемой даты в днях
fact - сдвиг для фактической даты в днях
prom - сдвиг для промежуточной даты в днях
intPlan - сдвиг для Внутренней плановой даты в днях
*/
function setDate(date,plane,fact,prom,intPlan)
{
var mt = new Date(date);
t = document.body.getElementsByTagName('INPUT');
    for(i=0;i<t.length;i++)
    {
        var er = t[i];
        if(er.title == 'Дата')       
            er.value = GetTimeShift(mt,0);
        else if(er.title == 'Плановая')                   
            er.value = GetTimeShift(mt,plane);
        else if(er.title == 'Фактическая')
            er.value = GetTimeShift(mt,fact); 
        else if(er.title == 'Промежуточная')
            er.value = GetTimeShift(mt,prom); 
        else if(er.title == 'Внутренняя плановая')
            er.value = GetTimeShift(mt,intPlan); 
             
    }
}
/*

А вот тут мне особенно нравиться :)

Мы производим разбор параметров переданных в адресной строке и используем их для вызова функции заполнения ячеек, все таки удобная штука JS
Параметры которые анализируем
startDate=12/05/2008 Месяц/день/Год
planDate
factDate
promDate
internalDate
*/
function CompouseDateReq(uri)
{
var date,plane,fact,prom,intPlan;
var ar = uri.split('&');
var arg = new Array();
arg['startDate'] = arg['planDate'] = arg['factDate'] = arg['promDate'] = arg['internalDate']= 0;
for(i=0;i<ar.length;i++)
{
    arg[ar[i].split('=')[0]] = ar[i].split('=')[1];
}
// setDate(date,plane,fact,prom,intPlan)
setDate(arg['startDate'],arg['planDate'],arg['factDate'],arg['promDate'],arg['internalDate']);
}

/*

тут все очень просто извлекаем адрес документа и отделяем параметры запроса

*/
function parseUrlParam()
{
var st = new String();
st = document.URL;
try{
CompouseDateReq(st.split('?')[1]);
}
catch(ex)
{
return;
}
}
parseUrlParam();
</script>

Комментариев нет: