Looks good but there's one bit that I'm not sure about.

return (parsed) ? Selectors.Utils.filter(this, parsed, {}) : true;

That statement returns true if you pass an invalid selector. For
example, $('myDiv').match('()*mootools'); returns true even though the
selector is whacked. I think this should be changed to return false.

On Apr 3, 8:41 am, Jacob <[email protected]> wrote:
> Ok, so I think I found the root of the problem here. If I pass an
> element as the thing to match, this method still fires
>
> Selectors.Utils.parseTagAndID(selector);
>
> which throws an error since this method assumes "selector" is a
> string.
>
> I have no idea how this assumption was reached, but by putting an
> extra switch to test for the $type() of the selector, I was able to
> avoid calling this entire section of code.
>
> Now my .match() method looks like:
>
> match: function(selector){
>         if (!selector) {
>             return false;
>         } else if (selector === this) {
>             return true;
>         } else if ($type(selector) === "string"){
>                 var tagid = Selectors.Utils.parseTagAndID(selector);
>                 var tag = tagid[0], id = tagid[1];
>                 if (!Selectors.Filters.byID(this, id) || 
> !Selectors.Filters.byTag
> (this, tag)) return false;
>                 var parsed = Selectors.Utils.parseSelector(selector);
>                 return (parsed) ? Selectors.Utils.filter(this, parsed, {}) :
> true;
>         }
>         return false;
>
> }
>
> Am I totally missing something here, or does this sound reasonable?
>
> On Apr 3, 9:41 am, Jacob <[email protected]> wrote:
>
>
>
> > +1
> > Thanks for all the help!
> > So, does this mean a mootools committer needs to file this as a bug,
> > or should/can I?
>
> > Also, on a small selector tangent, I think there is a bug with
> > the :contains() pseudo selector. For example, lets say you have this
> > markup:
>
> > <a href="foo" title="A link">Click Me</a>
>
> > So a selector like this should work: $$('a:contains(Click Me)') ,
> > right? It doesnt for me. Only this works: $$('a:contains(Click)') .
>
> > Same thing for attribute selectors. This doesnt work: $$("a[title=A
> > link]"). Rather, I have to do this:  $$("a[title*=A link]").
>
> > I wrote a post about this a couple months back. Is this a bug too?
> > Does it need to be logged?
>
> > I would like to be more helpful in documenting these types of things.
>
> > Thanks
> > Jacob
>
> > On Apr 3, 6:01 am, daKmoR <[email protected]> wrote:
>
> > > On Apr 3, 10:37 am, Tom Occhino <[email protected]> wrote:
>
> > > > I think we should probably tweak match to return false as the base  
> > > > case... If you pass no selector or an undefined / null selector, it  
> > > > would make sense to return false imo..
>
> > > +1

Reply via email to