在现代浏览器中,当使用有效的 CSS 选择器时,jQuery 会利用document.querySelectorAll()
来提高性能。document.querySelectorAll()
如果浏览器不支持选择器或方法,它会退回到 Sizzle 。
但是,在调试自定义选择器时,我希望始终使用 Sizzle 而不是本机实现。也就是说,我正在尝试实现jQuery 不支持的 CSS3 选择器:nth-last-child()
之一。由于现代浏览器原生支持此选择器,因此它的工作原理与链接问题中的描述相同。不过,正是这种行为干扰了我的自定义选择器的调试,所以我想避免它。
我可以使用的一个便宜的技巧是放入一个非标准的jQuery 选择器扩展,从而可以说“使”选择器“无效”。例如,假设 every li:nth-last-child(2)
is visible,我可以简单地将其放入,将其转为:
$('li:nth-last-child(2)').css('color', 'red');
进入这个:
$('li:nth-last-child(2):visible').css('color', 'red');
这导致它始终由 Sizzle 评估。除此之外,这要求我对我的页面元素做出一个假设,这可能是真的,也可能不是。我真的不喜欢那样。更不用说,除非绝对必要,否则我一般不喜欢使用非标准选择器。
有没有办法跳过document.querySelectorAll()
支持它的浏览器中的本机方法并强制 jQuery 使用 Sizzle 来评估选择器,最好不使用非标准选择器?很可能,这需要调用另一个方法而不是$()
,但它比选择器黑客 IMO 好得多。