在摘录中,
$({}).queue(function(next){})
$({})
代表什么?为什么人们使用这种形式?
我从this answer here on SO获得了代码。
答案 0 :(得分:4)
更新了答案
您引用comment below代码的this answer更改了显着的内容。
答案中的代码:
$(document)
.queue(callMe1)
.queue(callMe2);
...然后有评论建议使用{}
代替document
:
$({})
.queue(callMe1)
.queue(callMe2);
你会这样做来设置一个调用链,其中链中的后续调用不会发生,直到之前的调用说它们已经完成。他们所做的可以是同步或异步。这是一种早期的承诺形式。
让我们举一个例子:假设我想要一个接一个地做三件事,而且这些事情中的每一件都可能会或可能不会像动画一样异步。我们可以这样做:
$({}).queue(theFirstThing)
.queue(theSecondThing)
.queue(theThirdThing);
......以后的函数在早期函数说完之后才会被调用。
示例:
$({}).queue(theFirstThing)
.queue(theSecondThing)
.queue(theThirdThing);
function theFirstThing(next) {
// What I do is asynchronous: Fade out the a1 element,
// then call the next function in the chain if any
$("#a1").fadeOut("slow", next);
}
function theSecondThing(next) {
// What I do is synchronous
$("<p>Hi there</p>").appendTo(document.body);
// Chain to next if any
next();
}
function theThirdThing(next) {
// What I do is asynchronous: Fade out the a2 element,
// then call the next function in the chain if any
$("#a2").fadeOut("slow", next);
}
<div id="a1">a1</div>
<div id="a2">a2</div>
<div id="a3">a3</div>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
原始答案:
The documentation告诉我们:
jQuery(对象)
<强>对象强>
类型:PlainObject
包装在jQuery对象中的普通对象。
例如,它围绕一个普通对象包装一个jQuery实例。我们习惯于将jQuery实例包含在一个或多个DOM元素中,但它们也可以包含在其他东西中。
然后他们在生成的jQuery对象上执行queue
:
.queue([queueName],回调)
<强> QUEUENAME 强>
类型:字符串
包含队列名称的字符串。默认为fx,标准效果队列。<强>回调强>
类型:功能(函数next())
要添加到队列的新函数,其函数是调用将使下一个项目出列的函数。
这告诉我们它在做什么:围绕普通对象包装jQuery对象,然后调用queue
将某些内容放入该jQuery对象的默认动画队列中,即使其中没有要动画的元素也是如此
为什么人们会使用这种形式?
我从未见过这种用法。我在你的问题中没有想到使用它的任何理由,它只是在queue
调用期间立即调用该函数,我们可以在这里看到:
$({}).queue(function(next){
snippet.log("Function called");
next();
});
snippet.log("queue call complete");
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.11.1/jquery.min.js"></script>
<!-- Script provides the `snippet` object, see http://meta.stackexchange.com/a/242144/134069 -->
<script src="http://tjcrowder.github.io/simple-snippets-console/snippet.js"></script>
答案 1 :(得分:1)
我在实例化一个稍后将被真正的JQuery对象替换的变量之前使用过$({}),这样在意外结果的情况下,原始值仍然是一个有效的JQuery对象。在这种情况下可能没有必要。
经过检查,$()和$({})之间的一个主要区别是.length的值。分别为0和1。好问题和谈话。 1
答案 2 :(得分:-2)
每当没有上下文传递给jQuery对象时,上下文就是 设置为'文档'。由于$()没有上下文,因此上下文 默认为文档。与$([])和$({})相同。