1

jQuery メソッドの名前を含む JavaScript 変数があります。

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

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 に答える
0

これを試して:

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

fun('attr');

これは非常に単純なアプローチですが、$('img').attr('src')これを書いた場合と同じであるため、機能します$('img')['attr']('src')

于 2013-04-10T20:48:44.847 に答える