jQuery 选择器 + SVG 不兼容?
我一直在使用带有内联 SVG 和 javascript 动画的 HTML5 文档。
我希望当用户单击任何地方时弹出一个框,并且当用户单击非框的某个位置时我希望该框消失。这意味着我无法使用有效的 $(window).click()
。
我尝试通过指定类名并使用 $(".svgclassname").click()
来选择顶部的 SVG,但这似乎不起作用。使用 $("#svgname").click()
选择单个选项也不起作用。
问题是什么?
(当我将 $(".eyesvg")
替换为 $(window)
时,当用户单击窗口中的任意位置时,光标附近会出现一个蓝色框。)
I've been working with an HTML5 document with inline SVG and javascript animation.
I'd like to have a box pop up when the user clicks anywhere, and I'd like the box to go away when the user clicks somewhere that isn't the box. This means I can't use $(window).click()
, which works.
I've tried selecting the SVGs on top by giving them class names and using $(".svgclassname").click()
, but this doesn't seem to work. Neither does selecting individual ones with $("#svgname").click()
.
What is the problem?
(When I replace $(".eyesvg")
with $(window)
, a blue box appears near the cursor when the user clicks anywhere in the window.)
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(4)
发生这种情况是因为 SVG DOM 规范与 HTML DOM 有很大不同。
SVG DOM 是一种不同的方言,某些属性具有相同的名称,但含义不同。例如,要获取 svg 元素的 className,您可以使用:
受此影响的属性是
这些动画属性是结构体,其中
baseVal
保存的值与您在 HTML DOM 和中找到的值相同>animatedVal
拿着我不知道是什么。SVG DOM 还缺少一些依赖的属性库,例如
innerHTML
。这在很多方面破坏了 jQuery,任何依赖于上述属性的东西都会失败。
一般来说,SVG DOM 和 HTML DOM 不能很好地混合。他们的共同努力足以引诱你,然后一切就悄然破裂,另一个天使失去了翅膀。
我编写了一个小 jQuery 扩展,它包装了 SVG 元素,使它们看起来更像 HTML DOM。
它创建了一个围绕 SVG 对象的包装器,使它们看起来像 HTML DOM 到 jQuery。我将它与 jQuery-UI 一起使用,使我的 SVG 元素可放置。
HTML 和 SVG 之间缺乏 DOM 互操作性是一场彻底的灾难。所有为 HTML 编写的实用程序库都必须针对 SVG 进行重新设计。
This happens because SVG DOM spec differs a lot from HTML DOM.
SVG DOM is a different dialect, and some properties have same names but mean different things. For example, to get the className of an svg element, you use:
The properites affected by this are
These Animated properties are structs, with
baseVal
holding the same value you'd find in HTML DOM andanimatedVal
holding I am not sure what.SVG DOM is also missing some properties libraries depend on, such as
innerHTML
.This breaks jQuery in many ways, anything that depends on above properties fails.
In general, SVG DOM and HTML DOM do not mix very well. They work together just enough to lure you in, and then things break quietly, and another angel loses its wings.
I wrote a little jQuery extension that wraps SVG elements to make them look more like HTML DOM
It creates a wrapper around SVG objects that makes them look like HTML DOM to jQuery. I've used it with jQuery-UI to make my SVG elements droppable.
The lack of DOM interoperability between HTML and SVG is a total disaster. All the sweet utility libraries written for HTML have to be reinvented for SVG.
你可以使用 jquery-svg 插件,就像一个魅力:
u can use jquery-svg plugin, like a charm:
有时我不明白......但实际上它不适用于类选择器。如果您使用 id $("#mysvg") 或元素 $("svg") 它确实有效!奇怪......
只有当您将 onClick 脚本从标题移动到 svg 元素之后的正文时,它才有效! jquery只能在绑定之前声明元素时才能绑定onclick。
sometimes I don't get it... but actually it doesn't work with the class-selector. If you use the id $("#mysvg") or the element $("svg") it does work! Strange....
And it only works when you move the onClick script from the header to the body after the svg element! jquery can only bind the onclick when the element is declared before the binding.
您必须使用从 div 到 SVG 元素的 CSS 路径才能单击对象
按照下面的例子:
You have to use CSS-path from div to SVG element to click on the object
as per below example: