Snap.svg可以't使用jQuery动态地(并且成功地)找到附加的SVG元素
Snap.svg can't find dynamically (and successfully) appended SVG element with jQuery
Snap.svg在这种情况下不起作用:
$('body').append($('<svg>').attr('id', 'test')) ;
console.log($('#test').length) ; // 1
var svg = Snap('#test') ;
svg.circle(100, 100, 50) ;
// Uncaught TypeError: Object [object Object] has no method 'circle'
但是当元素已经在HTML:中时工作
<body>
<svg id="test"></svg>
</body>
SVG元素已成功地在HTML中找到,但在Snap.SVG中找不到。第一个例子我做错了吗?还是一个bug?
看起来你找到了一个变通方法,但我认为你或任何阅读这个问题的人可能想要一个解释。
要创建SVG元素,必须使用document.createElementNS()
,因为SVG元素与html元素属于不同的名称空间。例如:
var elementHTML = document.createElement("svg"); //does not work
var elementSVG = document.createElementNS("http://www.w3.org/2000/svg", "svg"); //works!
在内部,当您只给jquery一个标签名称时,jquery使用document.createElement()
。一旦有了元素,就可以将其包装为jquery对象,并将其正常使用。
$(elementSVG).attr("width", 100); //etc.
使用$("<svg data-blah='asdf'>")
或类似的方法是可行的,因为除了简单标签之外的任何东西都会通过.innerHTML
放入元素中,然后提取出来。通过这种方式,可以使用相同的引擎,就好像它在页面的HTML标记中一样。HTML5规范现在有特殊的情况来说明在标记中遇到<svg>
元素时该怎么做。
在jquery中使用svg时需要注意的事项有:
- 属性不区分大小写,但有些svg属性是!例如,执行
$element.attr("attributeName", "stroke")
将不起作用 .animate()
有一些问题,但您可以使用自定义步骤函数来解决它
有关它的更多详细信息,请点击此处
相关文章:
- 在ajax成功后,cluetip不适用于首次点击活动元素
- 如何在jquery ajax成功html响应中找到输入隐藏元素
- 成功的 br 元素
- Snap.svg可以't使用jQuery动态地(并且成功地)找到附加的SVG元素
- For 循环成功地将元素添加到数组中,但在之后返回空数组
- 如何在聚合物中的自定义元素中成功查询选择器
- 如何检查元素是否在 HTML 页面中成功加载
- 在 AngularJS 中成功的 http 请求上创建一个 DOM 元素
- 成功提交表单后显示元素
- 在没有元素ID的情况下切换Ajax成功后的数据值
- 访问jquery.load成功函数中的目标元素
- 在.get()成功后更改元素样式
- HTML元素是否有加载成功的承诺?
- 我怎么进去'点击'元素,ajax成功回调
- Javascript拖放:成功拖放后移除被拖放的元素
- 将显示功能应用于ajax成功创建的元素
- 在ajax成功方法后链接到一个元素
- 在ajax成功调用页面重新加载后附加DOM元素
- 为带有量角器的离子应用程序创建一些测试,以测试用户是否可以成功地在chrome上拖放元素
- 在javascript验证成功时隐藏span元素