我正在尝试使用最新版本的时间选择器插件 http://trentrichardson.com/examples/timepicker/用于 jQuery UI。
另一个库已经在早期版本加载了它(1.0.4
)但我想使用最新的(1.4.5
) 版本。
在源码中 https://github.com/trentrichardson/jQuery-Timepicker-Addon/blob/master/src/jquery-ui-timepicker-addon.js,插件在继续之前检查是否已经加载:
$.ui.timepicker = $.ui.timepicker || {};
if ($.ui.timepicker.version) {
return;
}
我做了很多搜索方法来做到这一点,但没有找到任何有用的东西。我确实看到可以使用以下方法在页面上加载多个版本的 jQuerynoConflict
然后将其附加到不同版本的 jQuery,但我认为应该有一种更简单的方法。
我尝试了一下,它不起作用 - 我认为因为变量被引用,它们可能需要实例化 - 我不是 JS 专家,但至少我正在尝试:
// jQuery, jQueryUi, and the 1.0.4 version loaded beforehand
<script>
var _old_jquery_ui_timepicker = jQuery.ui.timepicker;
var _old_jquery_ui_timepicker_function = jQuery.fn.datetimepicker;
jQuery.ui.timepicker = null;
</script>
<script src="//cdnjs.cloudflare.com/ajax/libs/jquery-ui-timepicker-addon/1.4.5/jquery-ui-timepicker-addon.min.js"></script>
<script>
jQuery.ui.mytimepicker = jQuery.ui.timepicker;
jQuery.ui.timepicker = _old_jquery_ui_timepicker;
jQuery.fn.mydatetimepicker = jQuery.fn.datetimepicker;
jQuery.fn.datetimepicker = _old_jquery_ui_timepicker_function;
</script>
编写该代码感觉很脏,而且它又不起作用。因此,在没有任何运气之后,我尝试进行更多搜索,但仍然没有找到任何结果。我尝试寻找:
- 在同一页面上加载多个 jQuery 插件版本
- jQuery 插件无冲突
- 在不同的命名空间中加载 jQuery 插件
- 在不同的域中加载 jQuery 插件
- 在不同的上下文中加载 jQuery 插件
这做起来简单吗,我只是没有在寻找或正确的事情,还是不可能?
为什么我要尝试这个
我需要新版本的时间选择器的功能,但我不希望我的代码在更新或替换其他库时中断。
- 该网络应用程序正在使用一个(非 jquery)插件,该插件具有依赖于早期版本的大型代码库(
1.0.4
) 的时间选择器插件
- 这不是我更新其他插件的代码库的地方
- 我不想编写依赖于早期版本的代码(
1.0.4
)的 timepicker 插件,因为将依赖于其他代码库来加载旧版本(并且在更新时可能会中断)
所以,我同意使用两个版本的 jQuery 插件并不理想。但是,我确实需要添加 jQuery timepicker 插件更高版本的功能。我相信可以做到这一点,也许可以通过 Javascript 的原型设计和继承,而不必“破解它”正如 @Oliboy50 建议对插件源代码进行查找和替换。
有没有 Javascript 专业人士可以演示如何做到这一点(即使它并不理想)?
请注意:是的,我们已经确定尝试这样做“是一个坏主意”,但原则上我想知道 Javascript 的原型语言是否允许这样做。noconflict
(即加载多个版本的 jQuery)已经在评论和答案中提到。虽然这“可行”,但这不是我正在寻找的答案。此外,使用查找和替换修改插件源代码也不是一个真正优雅的解决方案。