Вы столкнулись с проблемами из-за области.Функция недоступна, потому что она находится внутри каждого оператора.
Но вы можете сделать что-то вроде this и составить список параметров, а затем передать, какой параметр вы хотите использовать,Аналогично, вы можете сделать так, чтобы вы могли передавать пользовательскую функцию через.
<p id="red">Red colored</p>
<p id="green">Green colored</p>
<p id="blue">Blue colored</p>
<div>This is a custom function</div>
(function($){
$.fn.extend({
color: function(method){
// list of possible methods
var methods = {
red: function(a){ return '<span style="color:red;">'+a+'</span>' },
green: function(a){ return '<span style="color:green;">'+a+'</span>' },
blue: function(a){ return '<span style="color:blue;">'+a+'</span>' },
}
// assign the appropriate function based on the "method" argument
var func = methods[method] || function(a){ return a; };
// run through the elements and apply that function
return this.each(function(i,e){
$(e).html(func($(e).html()));
});
},
color2: function(func){
func = func || function(a){ return a; };
return this.each(function(i,e){
$(e).html(func($(e).html()));
});
}
});
})(jQuery);
$('p').each(function(i,e){
$(e).color($(e).attr('id'));
});
$('div').color2(function(a){
return '<b style="color:#FF00FF">'+a+'</b>';
});
color
можно передать имя, найденное в объекте method .color2
можно передать целую функцию, чтобы вы могли расширить то, что вы хотели бы с ней сделать.(Вы можете просто проверить параметры и изменить поведение в зависимости от типа аргумента, но это было сделано для демонстрации).