You can return the jQuery object, but jQuery will throw undefined if you attempt to call
$('.selector').recurse You'd have to call $.recurse You can implement a pretty quick fix, if you don't plan on doing much else with the function. Try: $.recurse = $.fn.recurse = function(options){ ... } On May 6, 3:51 pm, AndyCramb <andycr...@googlemail.com> wrote: > Thanks Eric > > So is the only way to chain from an extended function in jQuery is to > use $.fn.recurse= function(){} > I cannot uses $.recurse = function() { } and return the jQuery object > from within this function? > > Thanks > andy > > On May 6, 3:13 pm, Eric Garside <gars...@gmail.com> wrote: > > > Your "recurse" function is not a method of the jQuery.fn object, so it > > can't work on elements. > > > The line: > > > $.recurse = function(options) { > > > should be > > > $.fn.recurse = function(options) { > > > On May 6, 9:00 am, AndyCramb <andycr...@googlemail.com> wrote: > > > > I am trying to write a plugin that will eventually match a specific > > > string pattern on the id attribute of all form element(s) > > > I aim to get a collection of all elements that I want to return for > > > chaining > > > I generate a regular expression on the fly based on the arguments > > > passed in and use this to find an initial set of elements > > > I have this returning jquery objects using this > > > > $(":input").filter(function() { > > > //return this.id.match(regEx); > > > return $(this).attr("id").match(regEx); > > > }) > > > > this also works > > > > $(":input").filter(function() { > > > return $(this).attr("id").match(regEx); > > > }).setDisabled(true); > > > > But when I use this $("#a_1").recurse({source:"a_1"}).setDisabled > > > (true); ,my plugin function I get this > > > > TypeError: $("#a_1").recurse is not a function > > > > Its my first attempt at a plugin and I guess I am not returning the > > > jquery object and I am not sure if this is the correct approach > > > Anyway any advice would be much appreciated > > > Full code below > > > > (function($) { > > > > $.recurse = function(options) { > > > > var defaults = { > > > delimeter: "_" > > > , level: 1 > > > , dir: "down" > > > , source: "body" > > > } > > > > var settings = $.extend({}, defaults, options); > > > > // funtion to find regEx > > > function generateRegEx(delimeter, src, direction) { > > > > console.log(src.split(delimeter)); > > > console.log(src.length); > > > > // need to have the concept of next and prev > > > // so for prev or back take away a wholePattern match > > > // and fro next or forward add a pattern match > > > // so based on src and the up or down param > > > var dir = direction > > > > arr = src.split(delimeter); > > > var arrLength = arr.length; > > > console.log(arrLength); > > > > if (arrLength <= 1 && direction == "up") { > > > //alert("the only way is forward"); > > > throw Error("you can only go up from here"); > > > direction = "up"; > > > } > > > > arrLength = (direction == "up") ? arrLength - 2 : > > > arrLength; > > > > //^([0-9a-zA-Z-]+\_){3}$ - this gets all the pattern does > > > ntot take account of src > > > // supercedes the one above ^a_1(\_[0-9a-zA-Z-]+){2}$ > > > var delPattern = src + "(\\" + delimeter + "[0-9a-zA-Z-] > > > +)"; //this will match the character that separates the levels > > > var numerOfPattern = "{" + arrLength + "}"; //this matches > > > all alpha-numeric characters in between the delimeters > > > var wholePattern = delPattern + numerOfPattern; // this > > > combines them both > > > > console.log(wholePattern); > > > > var pattern = "^" > > > > pattern += wholePattern; > > > pattern += "$"; > > > > console.log(pattern); > > > return new RegExp(pattern); > > > }; > > > > var regEx = generateRegEx(settings.delimeter, settings.source, > > > settings.dir); > > > > $(":input").filter(function() { > > > //return this.id.match(regEx); > > > return $(this).attr("id").match(regEx); > > > }) > > > > }; > > > > })(jQuery);