【发布时间】:2019-09-19 09:32:34
【问题描述】:
我很困惑,因为我注意到以下这 2 个案例的结果与我预期的不同;
console.log(typeof document.querySelector('.holder'));
console.log(typeof $('.holder'));
浏览器说这两种情况是相同的变量类型,object。但是当我尝试添加 .each 方法时,它说 document.querySelector('.holder') 不是函数。
'use strict'
const createMenuTable = (root, clips) => {
return root.each(() => {
console.log(root);
})
}
let myTable = createMenuTable(
document.querySelectorAll('.table'),
document.querySelector('.layerGroup')
); // When I change the `root` argument to the `$('.table')`, it runs w/o an error.
<div class="table">
<div class="layerGroup">
</div>
</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>
未捕获的类型错误:root.each 不是函数
我的目标是像 jQuery 一样使用普通的 JavaScript 将element 作为函数,但不知道如何解决这个问题。
如果有人能解释一下为什么这两种情况即使它们的变量类型相同,也没有给出相同的结果,我将不胜感激。
【问题讨论】:
-
"Document 方法 querySelector() 返回文档中与指定选择器或选择器组匹配的第一个元素。如果未找到匹配项,则返回 null。"所以是的,那是真的developer.mozilla.org/en-US/docs/Web/API/Document/querySelector
-
人们需要学习 JavaScript != jQuery,它们不是一回事。对于跳过 JS 学习的主要步骤并开始搞乱太多框架和库的开发人员来说,这是一个常见的误解......
-
document.querySelector('.layerGroup') == $('.layerGroup').get(0)返回true的文档,其中一个匹配节点确实存在,document.querySelectorAll('.layerGroup')[0] == $('.layerGroup').get(0)也存在,如果这有帮助:) -
@sniffingdoggo 你应该为developer.mozilla.org/en-US添加书签,它们提供了所有javascript的完整文档。例如,
document.querySelector使用此资源,您可以查看底层类型实际上是什么,以及任何给定类型上可用的方法和属性。 -
此外,您可以通过引用 jQuery documentation 将其与 jQuery 绑定在一起
标签: javascript jquery variables each factory