Показать сообщение отдельно
  #17 (permalink)  
Старый 14.11.2012, 01:27
Профессор
Отправить личное сообщение для DjDiablo Посмотреть профиль Найти все сообщения от DjDiablo
 
Регистрация: 04.02.2011
Сообщений: 1,815

Прототип функционально ориентиированного jquery

//конструктор обёрток для функций
  function wrapper(callback){
	return function(param){
		return function(){
			return callback.apply(this,[Array.prototype.slice.call(arguments),param])
		}
	}
   }

   //аналог $ в jquery
   function $(param){
	var wrap=wrapper(function(arg,context){
		if ( arg.length==0) return context;
		else if (typeof arg[0]=="function") {
             var w=wrap( context );
			arg[0]( w );
			return w;
		}
		else return wrap( context+arg[0] );	
	})

	return wrap(param);
   }

   //скрываем элемент
   function $hide(o){
	alert('скрыть '+ o() );
   }

   //если указан только p1 и p1 не функция, то породит функцию
   // если p1 это функция а p2- строка style, тогда сработает сразу 
   function $css(p1,p2){

	var wrap=wrapper(function(arg,style){
		alert("для элемента "+arg[0]()+" установить стили "+style);
		return wrap(style);
        });

	if (p2) return wrap(p2)(p1);
        if (p1) return wrap(p1);
  }




   // эксперементы
   
   //выберем все дивы
   var sel1=$("div");
   //из дивов выберем те у которых класс sel2
   var sel2=sel1(".sel2");


   $hide( sel1(".test1") );   //скроем div.test1
   $hide( sel2(".test2") );   //скроем div.sel2.test1

   //создадим функцию style из функции CSS
   var style1=$css(" opacity:0.5; left:200");

   alert(" !!!!!  применим несколько команд к выборке  !!!!! ");
   sel2( style1 )( $css("left:1000px;") )($hide);

   alert(" !!!!! применим несколько выборок к команде  !!!!! ");
   style1(sel2)( sel1 )( $(".hello") )

   alert(" !!!!!  скомбинируем оба подхода  !!!!! ");

   sel1( 
         style1(
              sel2(".t1")
         ) (
              sel2(".t2")
         )
   );
__________________
Лучше калымить в гандурасе чем гандурасить на колыме

Последний раз редактировалось DjDiablo, 14.11.2012 в 10:58.
Ответить с цитированием