Перед выполнением каких либо действий над элементами их сначала требуется найти, например:
function show() {
var block = $( this );
var input = block.find( 'input' );
var elem = block.find( '.elem' );
input.val( 1 );
elem.slideDown();
}
function hide() {
var block = $( this );
var input = block.find( 'input' );
var elem = block.find( '.elem' );
input.val( 0 );
elem.slideUp();
}
Как вы уже наверное заметили у этих функции есть общий код, который хотелось бы вынести. Есть несколько способов сделать это, но я решил изобрести велосипед.
function base() {
var block = $( this );
var input = block.find( 'input' );
var elem = block.find( '.elem' );
}
show = concatf( base, function() {
input.val( 1 );
elem.slideDown();
} );
hide = concatf( base, function() {
input.val( 0 );
elem.slideUp();
} );
Ну и собственно реализация функции concatf:
var concatf = ( function() {
function r( f ) {
return f.toString().replace( /^[^{]+{/, '' ).replace( /[^}]}$/, '' );
}
return function( f1, f2 ) {
return new Function( f2.toString().match( /(([^)]*))/ )[ 1 ].replace( /s/g, '' ), r( f1 ) + r( f2 ) );
}
} () );
В данной реализации есть большой минус, это потеря замыкания.
Эту проблему можно решить, но больно не красиво, поэтому приводить реализацию не буду.
Автор: tramak