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);

Reply via email to