调用变量中命名的jQuery方法

我有一个JavaScript变量,其中包含jQuery方法的名称:

var method = 'attr("src")'; 

我怎样才能让它像以下一样工作:

 console.log($('img').method) 

我试过了

 console.log($('img')[method]()) 

但它给出了这个错误:

 Uncaught TypeError: Object [object Object] has no method 'attr("src")' 

您遇到的问题是您将方法名称及其参数编码在一个字符串中。

如果您有一个数组首先包含方法名称然后是参数,这将很容易,根据以下简单的插件,我刚刚敲了一下:

 (function($) { $.fn.invoke = function(args) { var method = args.shift(); return $.fn[method].apply(this, args); } })(jQuery); var method = ['attr', 'src']; var src = $('img').invoke(method); 

见http://jsfiddle.net/7rBDe/1/

您也可以使用新函数,而不是与eval相同的范围:

 (new Function( "return $('img')."+method )()) 

http://jsfiddle.net/J9zU4/

您所描述的method实际上是方法和参数的组合。 如果您可以将方法名称和参数分解为可以执行以下操作:

 var method = 'attr'; var param = 'class'; $('.post-text')[method](param); // returns "post-text" on this page. 

这与以下内容相同:

 $('post-text').attr('class'); 

试试这个:

 function fun(funcName){ return $('img')[funcName]('src'); } fun('attr'); 

这是一个非常简单的方法,但它有效,因为$('img').attr('src')是相同的,如果你写这个$('img')['attr']('src')