你编写过哪些有用的自定义jQuery选择器?

21

对我来说,jQuery 中最好但被低估的功能之一是自定义选择器。我有一个相当简单的示例,可以选择所有空文本框:

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

然后进行调用:

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

我想知道是否有其他人编写的自定义选择器的有用示例。

当然,我并不盲目地忽视这些的缺陷,并认识到它们可能会相当慢,因此应与其他更快的选择器结合使用。如果有任何其他问题需要注意,那将非常有用。


1
不是,但这是一个不错的扩展,谢谢您发布它。 - Question Mark
我从来不需要编写自定义选择器,因为jQuery已经足够强大。 - Josh Stodola
@Josh:我不太确定你是否理解了Sizzle(jQuery的选择器引擎)的这个功能。 - Boldewyn
3个回答

10

我还没有写过任何内容,不过James Padolsey有一个很棒的收藏可以使用选择器插件(用于查看元素、外部链接、具有特定.data属性的元素等)。


3
如果您正在使用ASP.NET,此选择器将帮助您通过ID查找服务器控件:
$.expr[":"].asp = function(a, i, m) {
    return $(a).attr('id') && $(a).attr('id').endsWith(m[3]);
};

如果你有一个看起来像这样的服务器控件
<asp:TextBox runat="server" ID="txtPhoneNumber" />

您可以像这样访问它。
$(":asp(txtPhoneNumber)")

编辑

忘记添加endsWith扩展。

String.prototype.endsWith = function(str) {
    return (this.match(str + '$') == str);
};

喜欢它!不太确定函数参数中的 i 和 m 是用来做什么的。 - James Wiseman
我认为 i 是用来表示索引的,但不要引用我的话。 - Sneakyness
Sneakyness是正确的,i代表索引。m返回一个数组,在这种情况下将返回[":asp(txtPhoneNumber)", "asp", "", "txtPhoneNumber"],因此我正在使用m [3]来获取我传入的id。 - Tim Banks
为什么ASPNET需要一个不同的基于ID的选择器?难道.aspx文件中的ID与生成的.html文件中的ID不同吗? - Cheeso
1
@James Wiseman:http://jquery-howto.blogspot.com/2009/06/jquery-custom-selectors-with-parameters.html - Mathias Bynens

0

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接