1

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

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

我怎样才能让它像这样工作:

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

我试过了

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

但它给出了这个错误:

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

4 回答 4

9

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

相反,如果您有一个首先包含方法名称然后是参数的数组,这将很容易,根据我刚刚拼凑的以下琐碎插件:

(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/

于 2013-04-10T20:55:30.373 回答
0

尝试这个:

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

fun('attr');

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

于 2013-04-10T20:48:44.847 回答
0

您也可以使用新功能,与 eval 的范围不同:

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

http://jsfiddle.net/J9zU4/

于 2013-04-10T20:52:02.790 回答
0

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

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

这与以下内容相同:

$('post-text').attr('class');
于 2013-04-10T20:58:24.450 回答