What useful custom jQuery selectors have you written?
Asked Answered
S

3

21

For me, one of the best, yet under-utilised feature of jQuery is the custom selector. I have a fairly trivial example of this, to pick out all text boxes that are empty:

$(document).ready(function() {
    $.extend($.expr[':'], {
        textboxEmpty: function(el) {
            var $el = $(el);
            return ($el.val() == "") && ($el.attr("type") == "text");
        }
    });
});

And to call:

alert($(":textboxEmpty").length);

I was wondering, really, if anyone else had some useful examples of custom selectors they have written.

I am, of course, not blind to the pitfalls of these, and realise that they can be quite slow and, as such, should be combined with other faster selectors. It would be useful to hear if there are any other problems we should be aware of.

Sharpsighted answered 21/12, 2009 at 14:58 Comment(3)
No, but that is a nice extension, thanks for posting it.Accursed
I never needed to write a custom selector because jQuery is already robust enoughArthro
@Josh: I'm not quite sure, if you understood this feature of Sizzle (jQuery's selector engine).Dogtrot
S
10

I haven't written any, yet James Padolsey has a great collection of selector plug-ins (for elements in view, for external links, for elements with a specific .data property, etc)

Solar answered 21/12, 2009 at 15:42 Comment(0)
F
3

If you are using ASP.NET, this selector will help you find server controls by id:

$.expr[":"].asp = function(a, i, m) {
    return $(a).attr('id') && $(a).attr('id').endsWith(m[3]);
};

If you had a server control that looked like

<asp:TextBox runat="server" ID="txtPhoneNumber" />

You could access it like this

$(":asp(txtPhoneNumber)")

EDIT

Forgot to add the endsWith extension

String.prototype.endsWith = function(str) {
    return (this.match(str + '$') == str);
};
Flin answered 21/12, 2009 at 15:39 Comment(5)
Like it! Not quite sure what the i and m on the function parameters are for.Sharpsighted
I think i is for index, don't quote me on that though.Twister
Sneakyness is correct, i is for index. The m returns an array which in this case would return [":asp(txtPhoneNumber)", "asp", "", "txtPhoneNumber"] so I am using m[3] to get the id that I passed inFlin
Why does ASPNET need a different id-based selector? Is it the case that the ID within the .aspx file is not the same as the resulting ID within the generated .html file?Komsomol
@James Wiseman: jquery-howto.blogspot.com/2009/06/…Electret
S
0

As custom selectors are suggested on stackoverflow I'll add them here

Select 'URL' style

Selecting empty text input using jQuery

Sharpsighted answered 26/2, 2010 at 16:17 Comment(0)

© 2022 - 2024 — McMap. All rights reserved.