Прототип функционально ориентиированного 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")
)
);