jQueryUI工具提示与Twitter Bootstrap竞争

mar*_*net 132 jquery-ui twitter-bootstrap

我已经能够获得一些工具提示,最终使用以下代码:

<a href="#" rel="tooltip" title="Tool tip text here">Hover over me</a>
Run Code Online (Sandbox Code Playgroud)

然后

<script>
    $('[rel=tooltip]').tooltip();
</script>
Run Code Online (Sandbox Code Playgroud)

我遇到的问题是它使用的是jQueryUI工具提示(没有箭头,大丑陋的工具提示)而不是Bootstraps.

我需要做些什么来使用Bootstrap工具提示而不是jQueryUI?

The*_*emz 179

jQuery UI和Bootstrap都tooltip用于插件的名称.使用$.widget.bridge创造了jQuery UI的版本不同的名称,并允许引导插件留下来命名的工具提示(试图使用noConflict的引导部件选项只是导致了很多的错误,因为它不能正常工作,这个问题已经在这里报道):

// Resolve name collision between jQuery UI and Twitter Bootstrap
$.widget.bridge('uitooltip', $.ui.tooltip);
Run Code Online (Sandbox Code Playgroud)

所以使它工作的代码:

// Import jQuery UI first
<script src="/js/jquery-ui.js"></script>
// Resolve name collision between jQuery UI and Twitter Bootstrap
$.widget.bridge('uitooltip', $.ui.tooltip);
// Then import bootstrap
<script src="js/bootstrap.js"></script>
Run Code Online (Sandbox Code Playgroud)

漂亮的复制粘贴代码,也处理按钮冲突:

<script type="application/javascript" src="/js/jquery.js"></script>
<script type="application/javascript" src="/js/jquery-ui.js"></script>
<script>
/*** Handle jQuery plugin naming conflict between jQuery UI and Bootstrap ***/
$.widget.bridge('uibutton', $.ui.button);
$.widget.bridge('uitooltip', $.ui.tooltip);
</script>
<script type="application/javascript" src="/js/bootstrap.js"></script>
Run Code Online (Sandbox Code Playgroud)

  • covar - 你确定你导入了所有的src脚本吗?您使用的是较新版本的库吗? (2认同)
  • 如果你把所有东西都捆绑在一起并且缩小了,这是一种痛苦的解决方案......没有办法把这个剧本放在某种程度上......这个名字碰撞垃圾. (2认同)
  • 如果您使用带有缩小代码的 webpack 包,您可以简单地将 jquery-ui 放在 bootstrap.js 之前 (2认同)

Ste*_*rra 66

一个简单的解决方案是在jquery-ui.js之后加载bootrap.js,以便bootstrap .tooltip方法优先.

  • 不幸的是,没有为我工作. (5认同)
  • 有一天,您将使用这种方法在对话框中丢失关闭图标。/sf/ask/1215741551/ (3认同)
  • 这对我有用,是最简单的方法。我建议添加一个HTML注释,说明必须在另一个库之后加载一个库。 (2认同)

Pon*_*cho 27

这对我有用:

如果您需要使用JQuery-UI但想要使用bootstrap的工具提示,只需从该网站获取JQuery-UI的自定义版本.

只需取消选中"工具提示"选项,然后下载它(它将类似于"jquery-ui-1.10.4.custom.js").

只需将其添加到您的项目而不是您当前使用的版本,您就可以开始派对了.这样可以避免冲突.它对我来说就像一个魅力!

  • 简单,容易,非常适合我的情况。谢谢!+1 (2认同)

sup*_*san 24

如果你必须jquery-ui.jsbootstrap.js这之后加载是如何做到的:

<script type="application/javascript" src="/js/jquery.js"></script>
<script type="application/javascript" src="/js/bootstrap.js"></script>

<script>var _tooltip = jQuery.fn.tooltip;</script>
<script type="application/javascript" src="/js/jquery-ui.js"></script>
<script>jQuery.fn.tooltip = _tooltip;</script>
Run Code Online (Sandbox Code Playgroud)

这将覆盖jquery-ui的工具提示并始终使用bootstraps.


小智 14

假设在初始化bootsrap之后将调用UI

在UI初始化之前存储引导函数

jQuery.fn.bstooltip = jQuery.fn.tooltip; 
Run Code Online (Sandbox Code Playgroud)

然后将其称为以下

$('.targetClass').bstooltip();
Run Code Online (Sandbox Code Playgroud)


Jon*_*ens 9

这个解决方案似乎对我有用.

// handle jQuery plugin naming conflict between jQuery UI and Bootstrap
$.widget.bridge('uibutton', $.ui.button);
$.widget.bridge('uitooltip', $.ui.tooltip);
Run Code Online (Sandbox Code Playgroud)


小智 7

那么只使用Bootstrap popovers呢?BS popovers不会创建相同的冲突,尽管它们需要相同的tooltip.js组件.是的,它们更具风格,但不会导致我的JQuery UI按钮变得不稳定.

我正在使用Jquery UI仅用于自定义自动完成/组合框(因此无法声称其他JQ-UI控件都可以)并且以上都没有解决在调用BS工具提示时组合框按钮变为"无样式"的CSS问题.切换到BS Popovers提供了基本相同的效果,没有冲突,没有重新排序我的脚本导入,也没有需要明确的桥接语句.

  • 像这样,非常务实 (3认同)

Mat*_*att 3

尝试使用jQuery.noConflict()看看这是否对您有帮助。看起来 bootstrap 和 jQuery 使用相同的命名空间,也许 bootstrap 和 jQuery 工具提示被加载到同一个函数中,或者先加载一个。

您还可以检查首先加载哪个库。通常,如果您在 javascript 中声明同一函数两次,则使用第二个函数。

第三,检查 jQueryUI 包(在他们的网站上),看看是否可以下载不包含工具提示的版本(我检查过,这是完全可行的)。