Aber mir gings ja eher darum, ihn auf die grundsätzlichen Strukturen beim Pluginbauen zu stossen...
Okay. Der Fehler von johny7 war ja, dass er bloß ein nacktes Objekt anstatt eines jQuery-Objekts zurückgegeben hat. Also wäre eine direkte Antwort:
jQuery.fn.myfilter = function(str)
{
var retObj = jQuery(); // erzeuge leeres jQuery-Objekt, [link:http://api.jquery.com/jQuery/#returning-empty-set@title=ab jQuery 1.4]
$(this).find(str).each(function()
{
if ($(this).hasClass('hallo'))
// Hier wird jetzt retObj einfach überschrieben.
// Wie mache ich es aber, dass es angehängt wird, damit am Ende ein Objekt-Set herauskommt?
retObj = retObj.[link:http://api.jquery.com/add/@title=add](this); // so geht es --molily
}
);
return retObj;
}
Wie gesagt, das ist natürlich so ineffizient, es geht nur um das Prinzip des Zusammenbauens eines jQuery-Objekts.
Was diesen Code angeht:
(function($){
$.fn.myfilter = function(str) {
return this.each(function() {
$(this).find(str + ".hallo").each(function() {
$.myfilter.store.push( $(this).html() );
});
});
};
$.myfilter = {
store:[]
};
})( jQuery );
Anstelle von each will man beim Filtering ja mehr eine map-Operation:
$.fn.myfilter = function (str) {
return this.[link:http://api.jquery.com/map/@title=map](function () {
return $(this).find(str + ".hallo");
});
};
Auch das wieder nur zur Veranschaulichung. Da das jQuery-Objekt selbst eine Liste ist, ist jede Filteroperation als map() umgesetzt. Deshalb macht obiger Code dasselbe wie das besagte kurze return $(this).find(str + ".hallo")
.
Mathias