javascript – 我可以强制jQuery使用Sizzle来评估选择器而不使用非标准选择器吗?

前端之家收集整理的这篇文章主要介绍了javascript – 我可以强制jQuery使用Sizzle来评估选择器而不使用非标准选择器吗?前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
在现代浏览器中,当使用有效的CSS选择器时,jQuery使用document.querySelectorAll()来提高性能.如果浏览器不支持选择器或document.querySelectorAll()方法,它会回退到Sizzle.

但是,在调试自定义选择器时,我想总是使用Sizzle而不是本机实现.也就是说,我正在努力想出一个实现:nth-​​last-child(),one of the CSS3 selectors that are not supported by jQuery.由于现代浏览器本身支持这个选择器,它的工作方式与链接问题相同.正是这种行为干扰了调试我的自定义选择器,所以我想避免它.

我可以使用的廉价黑客是放入非标准的jQuery selector extension,从而使选择器“无效”.例如,假设每个li:nth-​​last-child(2)都是visible,我可以简单地将其删除,转为:

$('li:nth-last-child(2)').css('color','red');

进入这个:

$('li:nth-last-child(2):visible').css('color','red');

这导致它总是被Sizzle评估.除此之外,这要求我假设我的页面元素可能是也可能不是.我真的不喜欢那样.更不用说,除非绝对必要,否则我不喜欢使用非标准选择器.

有没有办法在支持它的浏览器中跳过本机document.querySelectorAll()方法并强制jQuery使用Sizzle来评估选择器,最好不使用非标准选择器?可能,这需要调用另一个方法而不是$(),但它比选择器黑客IMO要好得多.

解决方法

您可以在jQuery加载之前将其设置为null,因此它认为它不受支持
document.querySelectorAll = null;
//load jquery,will trigger not supported branch
//Optionally restore QSA here (save a reference) if needed

这应该使this评估为假

演示:http://jsbin.com/asipil/2/edit

注释掉空行并重新运行,您将看到它将变为红色.

猜你在找的jQuery相关文章