概览
我试图找到与选择属性值匹配的 jQuery 函数并在选择上运行该函数。
例子。
$('[data-store="' + key + '"]').each(function() {
var $callback = $(this).attr('data-filter');
if($callback != null) {
var fn = window['$.fn.nl2br()'];
if(jQuery.isFunction(fn)) {
$(this).fn();
}
}
$(this).setValue(value);
});
问题1
我不确定如何从字符串创建 jQuery 函数调用。
我知道我可以这样调用函数,$(this)'onclick';但是我无法在尝试调用它之前检查它是否存在。
通常我可以这样做: var strfun = 'onclick'; var fn = body[strfun];
if(typeof fn === 'function') {
fn();
}
这似乎失败了:
var fn = window['$.fn.nl2br()'];
if(jQuery.isFunction(fn)) {
$(this).fn();
}
编辑:
我似乎在这方面取得了成功:
if($callback != null) {
var fn = $(this)[$callback]();
if( typeof fn === 'function') {
$(this)[$callback]();
}
}
问题2
使用 jQuery.isFunction() 你如何检查一个方法是否存在?你能用 jQuery.isFunction() 做到这一点吗?
例子
声明函数:
$.fn.nl2br = function() {
return this.each(function() {
$(this).val().replace(/(<br>)|(<br \/>)|(<p>)|(<\/p>)/g, "\r\n");
});
};
测试函数是否存在,这些选项失败:
jQuery.isFunction($.fn.nl2br); // = false
jQuery.isFunction($.fn['nl2br']()); //false
最佳答案
JavaScript 中的函数就像任何其他变量一样通过它们的名称来引用。如果您定义 var window.foobar = function() { ... }
您应该能够通过 window.foobar
和 window['foobar ']
。通过添加 ()
,您正在执行函数。
在您的第二个示例中,您应该能够通过 $.fn['nl2br']
引用函数:
$.fn.nl2br = function() {
return this.each(function() {
$(this).val().replace(/(<br>)|(<br \/>)|(<p>)|(<\/p>)/g, "\r\n");
});
};
console.log(jQuery.isFunction($.fn['nl2br']));
关于javascript - 字符串转 jQuery 函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10612378/