Проверьте, является ли функция JavaScript методом для элемента jQuery
Как определить, является ли функция методом для элемента jQuery?
Например, $.fn.fadeIn
является функцией:
typeof $.fn.fadeIn === 'function' //true
doIt
, которая принимает элемент jQuery и функцию, применяемую к этому элементу.
Пример HTML:
<h1>jQuery Function Test</h1>
<p class=t1>Highlight this line.</p>
<p class=t2>Hide this line.</p>
Пример JavaScript:
function doIt(elem, func) {
if (func === 'a jQuery function') //possible?
func.apply(elem);
else
func(elem);
}
function highlight(elem) {
elem.css('background-color', 'gold');
}
doIt($('p.t1'), highlight);
doIt($('p.t2'), $.fn.fadeOut);
Строка # 2 JavaScript нуждается в помощи.
Интерактивная версия:
2 ответа:
Вот решение, которое сочетает в себе идею строкового параметра, проверку, существует ли метод на объекте, и поддержку параметров...
function doIt(elem, func, params) { if (typeof func === 'function') func.apply(elem, [elem].concat(params)); else if (elem[func] && params instanceof Array) elem[func](params[0], params[1], params[2]); else if (elem[func]) elem[func](params); }
Или на jsfiddle
Нет. Но вы можете полностью удалить оператор if:
function doIt(elem, func) { func.apply(elem); } function highlight() { this.css('background-color', 'gold'); } doIt($('p.t1'), highlight); doIt($('p.t2'), $.fn.fadeOut);
Если вы хотите передать больше аргументов, вот быстрый пример:
function doIt(elem, func) { var args = Array.prototype.slice.call(arguments, 2); func.apply(elem, args); } function highlight(color) { this.css('background-color', color); } doIt($('p.t1'), highlight, 'gold'); doIt($('p.t2'), $.fn.fadeOut);