document.querySelectorAll()
具有跨浏览器的一些矛盾和旧的浏览器不支持这可能不会引起任何麻烦了现在。它具有非常直观的作用域机制和其他一些不太好用的功能。另外,使用javascript时,您将很难处理这些查询的结果集,在许多情况下,您可能想要这样做。jQuery提供的功能像他们的工作:filter()
,find()
,children()
,parent()
,map()
,not()
和几个。更不用说jQuery使用伪类选择器的能力。
但是,我不会将这些东西视为jQuery最强大的功能,而是将其视为其他东西,例如以跨浏览器兼容的方式或ajax接口在dom上“工作”(事件,样式,动画和操作)。
如果您只希望jQuery的选择器引擎,则可以使用一个jQuery本身正在使用的:Sizzle这样,您就可以拥有jQuerys Selector引擎的强大功能,而不会造成麻烦。
编辑:仅作记录,我是一个巨大的香草JavaScript迷。尽管如此,事实是有时您需要10行JavaScript才能编写1行jQuery。
当然,您必须受到纪律,不要像这样编写jQuery:
$('ul.first').find('.foo').css('background-color', 'red').end().find('.bar').css('background-color', 'green').end();
这很难读,而后者很清楚:
$('ul.first')
.find('.foo')
.css('background-color', 'red')
.end()
.find('.bar')
.css('background-color', 'green')
.end();
上面的伪代码将说明等效的JavaScript更加复杂:
1)找到元素,考虑采用所有元素或仅采用第一个。
// $('ul.first')
// taking querySelectorAll has to be considered
var e = document.querySelector("ul.first");
2)通过一些(可能是嵌套的或递归的)循环遍历子节点数组,并检查类(并非所有浏览器都提供类列表!)
//.find('.foo')
for (var i = 0;i<e.length;i++){
// older browser don't have element.classList -> even more complex
e[i].children.classList.contains('foo');
// do some more magic stuff here
}
3)应用css样式
// .css('background-color', 'green')
// note different notation
element.style.backgroundColor = "green" // or
element.style["background-color"] = "green"
这段代码至少是使用jQuery编写的代码行的两倍。另外,您还必须考虑跨浏览器的问题,这将损害本机代码的严重速度优势(除了可靠性之外)。
querySelector
方法中不起作用。(3)使用jQuery进行AJAX调用更加快捷,容易。(4)在IE6 +中的支持。我敢肯定,还有很多其他观点。