是否可以在 ajax 调用后重新初始化 jQuery 的所有插件

is it possible to re-initialize all-plugins for jQuery after ajax call?

本文关键字:jQuery 初始化 插件 ajax 调用 是否      更新时间:2023-09-26
如果我收到使用 $.post(...)

、$.get(...) 或其他东西的 ajax 响应。

收到的响应是一个HTML格式的文档,包括jQuery插件。

我知道jQuery插件需要在ajax响应后重新初始化。像这样的东西

$.get('<ajaxurl>').done(function(response){
    $('#some_element').html(response);
    $('#element1_in_some_element').init_plug_in_1();
    $('#element2_in_some_element').init_plug_in_2();
    $('#element3_in_some_element').init_plug_in_3();
    $('#element4_in_some_element').init_plug_in_4();
    ....
});

但是是否可以在 ajax 调用后重新初始化所有插件?

喜欢这个

$.get('<ajaxurl>').done(function(response){
    $('#some_element1').html(response);
    $('#some_element1').init_plug_in_all();
});

!!

如果您绑定到文档,它应该允许您在页面上动态添加自动应用插件的元素。

例如

$('.datePickers').datepicker();

只会在文档加载时触发,任何带有"datePickers"类的 NEW 元素都不会有可用的功能。

但是如果你像这样附着...

$(document).on('load','.datePickers', function() {
     $(this).datepicker();
});

它将应用于具有datePickers类的所有元素,甚至是通过AJAX添加的元素。

如果你创建一个函数来初始化插件,你可以在 ajax 调用结束时调用该函数来重新初始化所有插件。这没有什么标准,完全取决于您的插件和初始化器。考虑这样的事情:

var initializePlugins = function() {
  $('selector').datepicker();
  $('selector2').fullcalendar();
  $('selector3').jScrollPane();
};
// when ajax done
$.ajax().done(function() {
  initializePlugins();
});
// when the DOM is ready        
$(document).ready(function() {
  initializePlugins();
});

如果你想要$('#some_element1').init_plug_in_all();那么你可以写一个插件。

$.fn.init_plug_in_all = function(plug_1, plug_2, plug_3, plug_4){
  this.each(function() {
    plug_1 && $(this).init_plug_in_1();
    plug_2 && $(this).init_plug_in_2();
    plug_3 && $(this).init_plug_in_3();
    plug_4 && $(this).init_plug_in_4();
  });
};

然后像这样使用:-

$('#some_element1').init_plug_in_all(true, false, false, true);
$('.some_class').init_plug_in_all(false, false, true, true);
//etc