【问题标题】:How do I extend jQuery's replaceWith function to accept a callback function?如何扩展 jQuery 的 replaceWith 函数以接受回调函数?
【发布时间】:2012-01-26 18:05:39
【问题描述】:

这应该很容易吧?然而,我无法在任何地方找到此类功能的任何示例。问题是,在我做了一个 replaceWith() 之后,我想对那些写入 DOM 的元素做一些事情,但是如果我在 replaceWith() 调用之后立即对它们做一些事情,它们还不存在所以我需要确保 replaceWith() 完全完成。我只是想让这样的事情起作用:

$('#foo').replaceWith('some text', function() {
     //do something else here
});

想法?

【问题讨论】:

  • 当您尝试在之后立即进行处理时,您能否显示无法正常工作的代码? replaceWith 不是异步的,所以应该可以正常工作。 编辑我敢打赌,您仍然在尝试使用 #foo 做某事,但它不会存在,因为您只是替换了它...
  • 如果replaceWith 不是异步的,为什么还需要回调?你可以在调用replaceWith后立即调用你的方法。

标签: jquery callback


【解决方案1】:

您可以创建自己的函数来调用replaceWith

$.fn.replaceWithCallback = function(replace, callback){
    var ret = $.fn.replaceWith.call(this, replace); // Call replaceWith
    if(typeof callback === 'function'){
       callback.call(ret); // Call your callback
     }
    return ret;  // For chaining
};

【讨论】:

  • 我知道我在这方面很晚,但可能会帮助其他人。这不是这个问题的正确解决方案。尽管将按照他的要求之一调用函数,但它不可能用作回调。他在他的要求中明确提到“如果我在调用 replaceWith() 后立即尝试对他们做某事,他们还不存在,所以我需要确保 replaceWith() 完全完成” .它可能会在函数执行之前以某种方式replaceWith返回,但这只是运气。所以我建议不要使用这种方法来创建回调。
  • @Jehanzeb.Malik:replaceWith 是同步的。我的猜测是他试图使用缓存的 jQuery 对象。喜欢var $a = $('#foo'); $a.replaceWith('a');。尝试使用 $a 将不起作用,因为该元素不再存在。
  • 我遇到了同样的问题,试试这个:toUpdate.find('.inscription').replaceWith(inscription);initAddInscription(toUpdate.find('.inscription'));
【解决方案2】:

只需执行以下操作即可创建回调功能:

$("#myElement").replaceWith(function() {
  // call a function
);

并替换一个单词而不是内部html:

$("#derp").text(function(index, text) {
  // call a function here
  return text.replace('old', 'new');
});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-11
    • 1970-01-01
    相关资源
    最近更新 更多