jQuery插件返回this.each并为每个对象添加函数属性?

是否有可能创建一个jQuery插件,返回this.each以进行多次匹配,从而允许我为每个循环中的每个对象添加一个函数属性? 我想稍后直接从​​该对象调用此函数。

例如,这是我正在尝试做的简化版本:

(function ( $ ) { $.fn.roflcopter = function( options ) { return this.each(function() { $(this).addClass('lol'); $(this).getMyValue = function(e){ return returnMyFilteredValue($(this)); } }); function returnMyFilteredValue(elem){ return $(elem).val().replace("cat", "dog"); } }; }( jQuery )); 

然后我想在document.ready函数中调用这个:

 $("input.coolStuff").roflcopter(); var value = $("input.coolStuff").first().getMyValue(); 

这可能吗? 我收到一条错误,指出getMyValue不是一个函数。

微小变化:只需将getMyValue放在’this’而不是$(this)上并访问它

 $("input.coolStuff").first()[0].getMyValue() 

您可以使用.data()来存储和调用元素的函数; Function.prototype.bind().each()设置为$(this)

 $(function() { (function($) { $.fn.roflcopter = function(options) { return this.each(function() { $(this).addClass("lol"); function getMyValue(e) { return returnMyFilteredValue(this); }; $(this).data().getMyValue = getMyValue.bind($(this)); }); function returnMyFilteredValue(elem) { return elem.val(function(index, val) { return val.replace("cat", "dog"); }) } }; }(jQuery)); $("input.coolStuff").roflcopter(); var value = $("input.coolStuff").first().data().getMyValue(); console.log(value, value.val()) })