我可以强制jQuery的使用灒评估,而无需使用非标准选择一个选择?(Can I force jQue

2019-07-30 17:01发布

在现代浏览器,jQuery的利用了document.querySelectorAll()时,使用有效的CSS选择器来提高性能。 它回落到嘶嘶声,如果浏览器不支持选择或document.querySelectorAll()方法。

不过,我想调试的自定义选择时总是使用灒,而不是本机实现的。 也就是说,我试图想出的实现:nth-last-child() 对CSS3选择一个不受jQuery的支持 。 由于这个选择器原生的现代浏览器的支持,它的工作原理是在链接的问题进行说明。 正是这种行为与调试我的自定义选择,虽然干扰,所以我想,以避免它。

一个廉价的破解我可以用是非标准下降jQuery选择扩展 ,从而“无效”时,选择这么说。 例如,假设每li:nth-last-child(2)是可见的 ,我可以简单地丢弃在,把这个:

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

这个:

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

这将导致它总是由灒进行评估。 除此之外,这要求我做这可能是也可能不是真正的我的页面元素的假设。 我真的不喜欢这样。 更何况,我不喜欢使用非标准选择一般,除非绝对必要的。

有没有办法跳过本地document.querySelectorAll()在支持它,并迫使jQuery的使用灒,而不是评估一个选择的浏览器的方法,优选地采用使用非标准的选择吗? 有可能的,这需要调用另一个方法,而不是$()但它不是选择更好的破解IMO。

Answer 1:

你可以只将其设置为null的jQuery加载之前,所以它认为它不支持:

document.querySelectorAll = null;
//load jquery, will trigger not supported branch
//Optionally restore QSA here (save a reference) if needed

据说这是为了使这个计算结果为false

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

注释掉null线并重新运行,你会看到它会变成红色。



Answer 2:

既然你开发选择自己的代码,你能不能简单地给它一个自定义名称的开发周期的持续时间? 也许给它自己的供应商名称或东西吗? -bolt-nth-last-child()

这样的话,你就会知道,浏览器绝对不会支持它,所以它应该总是陷入使用灒。

当你和开发周期完成后,你可以删除-bolt-前缀。

我知道这是不是一个问题的答案更多的变通,但似乎对我来说最简单的解决方案。



Answer 3:

它看起来是jQuery.find默认喜人景象。 这将节省您通过设置一个本地函数来空破坏环境。

https://github.com/jquery/jquery/blob/master/src/sizzle-jquery.js#L3

所以,你应该能够做到以下几点,它总是会经历咝咝声。

$.find('li:nth-last-child(2)')


文章来源: Can I force jQuery to use Sizzle to evaluate a selector without using non-standard selectors?