我想扩展jQuery选择,以便将给定的选择值视为ID。
例如,当你执行$("foo.bar")
时,jQuery将尝试选择标签名为foo和类栏的所有元素,但我希望jQuery选择ID为foo.bar
的元素。我不想每次都转义点和前置#
,而是将jQuery添加为函数,以便我可以执行$("id:foo.bar")
之类的操作。
这可以用jQuery吗?如果是这样,有人能告诉我一些例子吗?
感谢。
答案 0 :(得分:3)
是的。您可以通过扩展.expr[]
来创建自己的选择器。例如:
$.extend($.expr[':'], {
'id': function(elem, i, attr){
return( elem.id === attr[3] );
}
});
用法是:
$(':id(foo.bar)');
答案 1 :(得分:2)
你可以$("[id=foo.bar]")
答案 2 :(得分:2)
如果您使用属性过滤器替换ID选择,则必须在页面上测试该ID的每个元素,而不是使用document.getElementById
。
如果您想要更方便一点,只需创建自己的包装器即可。如果需要,可以使用jQuery的命名空间:
jQuery.byId = function(id){return $(document.getElementById(id));};
$.byId('foo.bar').addClass('something');
答案 3 :(得分:1)
我没有具体的代码来执行此操作。请注意,覆盖jquery的全局行为可能会破坏其他人所做的插件。如果可以的话,你应该使用jquery 1.5的'sub'功能。它专门设计用于'sub'stitute jquery功能,同时保留其他插件的默认功能。