document.querySelectorAll()
浏览器之间存在一些不一致,并且在较旧的浏览器中不受支持这现在可能不会再造成任何麻烦了。它有一个非常不直观的作用域机制和其他一些不太好的特性。同样使用 javascript,您在处理这些查询的结果集时会更加困难,在许多情况下您可能想要这样做。jQuery提供的功能像他们的工作:filter()
,find()
,children()
,parent()
,map()
,not()
和几个。更不用说 jQuery 使用伪类选择器的能力了。
但是,我不会认为这些东西是 jQuery 最强大的特性,而是其他东西,比如以跨浏览器兼容的方式或 ajax 界面在 dom(事件、样式、动画和操作)上“工作” 。
如果您只想要来自 jQuery 的选择器引擎,您可以使用 jQuery 本身正在使用的一个:Sizzle这样您就可以拥有 jQuery 选择器引擎的强大功能,而不会产生令人讨厌的开销。
编辑:只是为了记录,我是一个巨大的香草 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 编写的代码行数的两倍。此外,您还必须考虑跨浏览器问题,这会损害本机代码的严重速度优势(除了可靠性之外)。