2013-05-14 93 views
1

我正在处理的自定义控件包含jquery ui 1.9.2,但它应插入的项目可能包含任何版本。那么,有没有什么方法可以改变库中的某些东西,或者我可以创建一个我版本的jquery ui的实例,并通过该实例调用我需要的函数?就像,比如我做一个名为“JQUI19”的一些实例,然后让说,我调用一个函数组合框作为如何使用两个不同版本的jQuery UI

$('#someElement').JQUI19.combobox(); 

或以任何其他方式。我记得我在某处看到过类似的事情,比如

myJQ('#someElement').combobox(); 

但是不能回想起我所见过的地方。

+3

切勿使用2个jQuery UI版本。您的自定义控件使用哪些jQuery UI 1.9.2特定功能? – Raptor 2013-05-14 06:29:54

+0

您将不得不处理名称冲突。你知道没有压倒一切,只有第二个js提到的功能才会出现。 – NT88 2013-05-14 06:31:52

+0

实际上,那些愿意使用我的控件的开发人员不应该知道控件中存在什么内容,也不能将它们绑定为使用与我使用的版本相同的jquery ui。 – 2013-05-14 06:35:13

回答

0

在jQuery库,后最后一行,类型

var mySelector = $; 

包括您的网页中包括此后的其他版本。

现在,在所有想用这个jQuery版本的脚本中(甚至可以使用不同版本的jquery ui和其他库),用mySelector替换$。使用replaceall,但会是几个地方,就像在正则表达式匹配函数中,您希望将mySelector替换回$。这个问题困扰了我很长一段时间。它刚刚解决了。

注意:确保您不会在jQuery原始脚本中替换任何$。

3

切勿使用两个版本的UI。

如果要打包的东西,将被多个客户端重复使用,要检查客户端是否有jQuery用户界面已经可用,那么你可以使用这样的事情:

if (typeof jQuery.ui !== 'undefined'){ 
// Add Google UI Library To Head 
(function() { 
    var jqUiScript = document.createElement('script'); jqUiScript.type = 'text/javascript'; jqUiScript.async = true; 
    jqUiScript.src = ('https:' == document.location.protocol ? 'https://' : 'http://') + '//ajax.googleapis.com/ajax/libs/jqueryui/1.10.3/jquery-ui.min.js'; 
    var s = document.getElementsByTagName('script')[0]; s.parentNode.insertBefore(jqUiScript, s); 
})(); 


} 
+0

我在想,为什么我不声明库中的变量,然后初始化它,当我想使用该库中的任何函数。之后,我摧毁它。这里是我想要做的事情,如 var a = function(){// jquery ui library} ........... a(); $('#myElement')。combobox(); destroyPlugin(a); //从DOM中删除脚本 现在我不确定的部分是,如何销毁插件? – 2013-05-14 07:01:45

+0

好吧,我刚刚得到了答案。谢啦! – 2013-05-14 07:27:06

+0

我只是想出了一个更好的解决方案。 – 2013-05-14 10:37:29

相关问题