【问题标题】:Carry out function after append [duplicate]追加后执行功能[重复]
【发布时间】:2017-10-12 12:46:02
【问题描述】:

似乎讨论了很多,但找不到简单的答案。我想确保在将加载器图标添加到 DOM 后执行某个功能,但了解 append 不支持此功能。有没有简单的解决方案?

当前代码:

$('#tab').on('shown.bs.tab', function(e) {
    $("#htmlelement").append('<i class="fa fa-spinner fa-spin fa-fw"></i>');
    functionafterappend();
});

【问题讨论】:

  • 在上面的欺骗中,有一个答案在调用附加的元素上使用ready(),我会先尝试一下
  • 停止使用同步ajax请求。
  • @Huangism 这不是 .ready() 所做的。在这种情况下,它会简单地将请求关闭以在下一个滴答时运行,这与 0 间隔 setTimeout 基本相同。它不等待任何东西“准备好”,它只是将它推到回调队列中,因为 dom 准备好了。
  • 是的,似乎已准备就绪,仅用于文档准备就绪

标签: javascript jquery chaining


【解决方案1】:

.append 是一个同步函数。因此,这个方案是有效的,你的functionafterappend()只会在append被执行后才会执行。

例如,看下面的例子,我在追加完成 3 秒后触发警报

$('div')
    .append(`<p>1. Append at ${console.log(new Date())}</p>`)
$('span')
    .append(`<span> 2. Another Append at ${console.log(new Date())}</span>`);
    
    // setTimeout(() => alert("Append has been completed"), 3000);
   
body {
  padding:50px;   
}

div {
  border:2px solid #bbb;
  background-color:#eee;
  padding:10px;
  margin:10px auto;
}

span {
  display:block;
  width:65px;
  font:bold 12px Arial,Sans-Serif;
  color:white;
  padding:5px 10px;
  background-color:black;    
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div>Lorem ipsum dolor sit amet consectetur adipiscing elitr sed diam nonumy tempe goreng.</div>

这是在append 之后做某事的最简单方法。当然,如果你想像这样链接函数:

.append('<span>1. Append</span>') .prepend('<span>1. Append</span>')

如果你想完全使用函数式,你甚至可以像这样使用 Lodash 进行函数组合:

const newFunc = pipe(append, prepend);

【讨论】:

  • 似乎是唯一对我有用的。感觉就像一个黑客解决方案,但还可以。谢谢!
  • 没什么可笑的。这是在append 之后做某事的最简单方法。当然,如果你想像这样链接函数:.append('&lt;span&gt;1. Append&lt;/span&gt;') .prepend('&lt;span&gt;1. Append&lt;/span&gt;') 等等。如果你想完全使用函数式,你甚至可以使用 Lodash 进行函数组合: const newFunc = pipe(append, prepend);也将其添加到答案中
  • 这很hacky,你正在等待3秒做某事,如果我不想等待3秒怎么办?如果我想在附加元素准备好后立即执行怎么办?
  • 哦,我应该澄清一下。 3 秒的等待不是为了等待追加完成。这是为了清楚地表明函数在 3 秒后被调用。您可以将其更改为 0 秒,甚至完全删除超时,它仍然会发挥相同的作用。我已经更新了答案以反映这一点
  • 换句话说,OP的当前代码已经可以工作了lol
猜你喜欢
  • 2014-07-01
  • 1970-01-01
  • 2012-08-09
  • 2011-05-05
  • 1970-01-01
  • 2016-02-01
  • 2016-08-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多