我一直在使用Twitter 的 Bootstrap Tooltip 插件。这工作得很好,除了在svg
元素上使用时,它会中断。经过一些调试,我缩小了问题的范围。在js
文件中,init
函数如下所示:
, init: function (type, element, options) {
var eventIn
, eventOut
...
if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
}
...
}
我记得 SVG-IE 9.0 的具体实现有很多问题,所以我做了以下修改:
if (this.options.trigger != 'manual') {
eventIn = this.options.trigger == 'hover' ? 'mouseenter' : 'focus'
eventOut = this.options.trigger == 'hover' ? 'mouseleave' : 'blur'
var flag = $.browser.msie && parseInt($.browser.version, 10) === 9
eventIn = flag ? "mouseover" : eventIn
eventOut = flag ? "mouseout" : eventOut
this.$element.on(eventIn, this.options.selector, $.proxy(this.enter, this))
this.$element.on(eventOut, this.options.selector, $.proxy(this.leave, this))
}
这在所有浏览器中都可以正常工作。经过一番搜索,我发现其他人也面临同样的问题。我不确定是否有更好的方法来修复此错误,尤其是在阅读链接中的参数之后。
在 IE9 中,文档上有一个原生 contains() 实现,所以 jQuery 使用它。问题是这个 contains() 实现没有扩展到 SVG 元素。
关于我的修复是否可以改进的任何建议?