Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/jquery/77.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
jQuery自定义选择_Jquery - Fatal编程技术网

jQuery自定义选择

jQuery自定义选择,jquery,Jquery,我想扩展jQuery选择,以便它将给定的选择值视为ID 例如,当您执行$(“foo.bar”)时,jQuery将尝试选择标记名为foo和类栏的所有元素,但我希望jQuery选择ID为foo.bar的元素。我希望将jQuery作为一个函数添加到jQuery中,这样我就可以执行类似于$(“id:foo.bar”)的操作,而不必每次都转义点并在前面加上一个 使用jQuery可以做到这一点吗?如果有,谁能给我举一些例子 谢谢。我没有具体的代码来执行此操作。请注意,重写jquery的全局行为可能会破坏其他

我想扩展jQuery选择,以便它将给定的选择值视为ID

例如,当您执行
$(“foo.bar”)
时,jQuery将尝试选择标记名为foo和类栏的所有元素,但我希望jQuery选择ID为
foo.bar
的元素。我希望将jQuery作为一个函数添加到jQuery中,这样我就可以执行类似于
$(“id:foo.bar”)
的操作,而不必每次都转义点并在前面加上一个

使用jQuery可以做到这一点吗?如果有,谁能给我举一些例子


谢谢。

我没有具体的代码来执行此操作。请注意,重写jquery的全局行为可能会破坏其他人制作的插件。如果可以,您应该使用jQuery1.5的“sub”特性。它是专门为“子”替换jquery特性而设计的,同时保留其他插件的默认功能

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

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

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

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

演示

如果用属性过滤器替换ID选择,它将必须测试页面上的每个元素以获取该ID,而不是使用
document.getElementById

如果您想更方便一点,只需创建自己的包装器。如果需要,可以使用jQuery的命名空间:

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

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

出于好奇……为什么?可读性?我的项目使用SpringMVC,其中嵌套元素名称(如foo.bar)非常常见。我需要经常选择这些元素,如果在ID前面加上数字符号,更重要的是每次都要避开点,那会很麻烦。你知道这样做会对性能造成什么影响吗?谢谢,这太棒了。我本来会接受这个答案的,但为时已晚…@汤姆:你可以改变被接受的答案,但这对我来说无关紧要。我只是想确保您和未来的读者知道,如果您根本不关心性能,那么在进行通用选择之后再进行自定义属性筛选是非常糟糕的。此功能现在已被删除(在1.7中被弃用,在1.9中被删除)