2011-02-08 116 views
3

我想扩展jQuery选择,以便它将给定的选择值视为一个ID。jQuery自定义选择

例如,当您做$("foo.bar")时,jQuery将尝试选择标签名为foo和类栏的所有元素,但我希望jQuery选择ID为foo.bar的元素。我不希望每次都需要转换点并预先安装一个#,我想添加一个jQuery作为一个函数,以便我可以执行诸如$("id:foo.bar")之类的操作。

这可能与jQuery?如果是这样,任何人都可以给我一些例子吗?

谢谢。

+0

出于好奇...为什么?可读性? – 2011-02-08 01:22:09

+0

我的项目使用Spring MVC,其中嵌套的元素名称(如foo.bar)非常常见。我需要大量选择这些元素,并且不得不预先在数字符号前添加ID,更重要的是,每次都会出现转义点。 – 2011-02-08 01:25:03

+1

您是否意识到这样做会使您受到的性能下降? – RightSaidFred 2011-02-08 01:52:08

回答

2

如果您有一个属性过滤器更换ID的选择,它必须测试页面的每一个元素该ID代替使用document.getElementById

如果你想多一点便利,只需创建自己的包装。如果你愿意,可以使用jQuery的命名空间:

jQuery.byId = function(id){return $(document.getElementById(id));}; 

$.byId('foo.bar').addClass('something'); 
1

我没有具体的代码来做到这一点。请注意,重写jquery的全局行为可能会破坏其他人所做的插件。如果你可以的话,你应该使用jQuery 1.5的'sub'特性。它专门设计用于“保留jquery特性”,同时保留其他插件的默认功能。

+0

这是一个链接。 http://api.jquery.com/jQuery.sub/ – rcravens 2011-02-08 01:23:50

2

你可以做$("[id=foo.bar]")

3

它。您可以通过扩展.expr[]来创建自己的选择器。例如:

$.extend($.expr[':'], { 
    'id': function(elem, i, attr){ 
     return(elem.id === attr[3]); 
    } 
}); 

用法是:

$(':id(foo.bar)'); 

演示http://www.jsfiddle.net/cwwGk/1/