Bol*_*ock 7 javascript jquery jquery-selectors sizzle
在现代浏览器中,document.querySelectorAll()当使用有效的CSS选择器时,jQuery会利用它来提高性能.如果浏览器不支持选择器或document.querySelectorAll()方法,它会回退到Sizzle .
但是,在调试自定义选择器时,我总是希望使用Sizzle而不是本机实现.也就是说,我试图想出的实现:nth-last-child(),不受jQuery的支持CSS3选择之一.由于现代浏览器本身支持此选择器,因此它的工作方式与链接问题相同.正是这种行为干扰了调试我的自定义选择器,所以我想避免它.
我可以使用的一个便宜的黑客是放入一个非标准的jQuery选择器扩展,从而可以说"使选择器无效".例如,假设每个li:nth-last-child(2)都是可见的,我可以简单地将其删除,转为:
$('li:nth-last-child(2)').css('color', 'red');
Run Code Online (Sandbox Code Playgroud)
进入:
$('li:nth-last-child(2):visible').css('color', 'red');
Run Code Online (Sandbox Code Playgroud)
这导致它总是由Sizzle评估.除此之外,这要求我假设我的页面元素可能是也可能不是.我真的不喜欢那样.更不用说,除非绝对必要,否则我不喜欢使用非标准选择器.
有没有办法document.querySelectorAll()在支持它的浏览器中跳过本机方法并强制jQuery使用Sizzle来评估选择器,最好不使用非标准选择器?可能,这需要调用另一种方法而不是$(),但它比选择器黑客IMO要好得多.
您可以null在jQuery加载之前将其设置为,因此它认为它不受支持:
document.querySelectorAll = null;
//load jquery, will trigger not supported branch
//Optionally restore QSA here (save a reference) if needed
Run Code Online (Sandbox Code Playgroud)
据说这是为了使这个计算结果为false
演示:http://jsbin.com/asipil/2/edit
注释掉该null行并重新运行,您将看到它将变为红色.