sba*_*tes 8 javascript jquery html5 svg
我正在使用jQuery将一个元素添加到嵌入式SVG中,如下所示:
var rect = SVG('rect');
$(rect).attr( { x: left,
y: top,
width: right - left,
height: bottom - top,
style: style } );
$(parentElement).append(rect);
Run Code Online (Sandbox Code Playgroud)
parentElement可以是例如$('g:first',svgRoot),其中svgRoot是指嵌入的SVG元素.
function SVG(elementName) {
return document.createElementNS('http://www.w3.org/2000/svg', elementName);
}
Run Code Online (Sandbox Code Playgroud)
这很好用,新的矩形显示在浏览器中并添加到DOM:

但是,删除此矩形失败.它仍然显示在浏览器中并出现在DOM中:
$(rect).remove();
Run Code Online (Sandbox Code Playgroud)
我也试过了
rect.parentNode.removeChild(rect);
Run Code Online (Sandbox Code Playgroud)
这导致错误消息"Uncaught TypeError:无法调用方法'removeChild'为null".
你知道我怎么解决这个问题吗?在我的项目中不可能使用jQuery SVG或其他插件/框架.
我最终用groups 解决了这个问题.
我最终得到了这段代码:
var group = getGroupByName(name);
group.parentNode.removeChild(group);
...
function getGroupByName(name) {
var container = document.getElementById("container");
var groups = container.getElementsByTagName("g");
for(var i=0; i<groups.length; i++) {
if(groups[i].getAttributeNS(null, "name") === name) {
return groups[i];
}
}
return null;
}
Run Code Online (Sandbox Code Playgroud)
container我的主要SVG元素在哪里?
这是经过验证的.工作正常.
编辑
正如评论中指出的那样.你可以找到有效的小提琴.与你的例子类似.它创建了4个矩形并删除了第2个矩形.
如果要删除第一个元素,则必须指定:
$("rect").first().remove();
Run Code Online (Sandbox Code Playgroud)
或者如果你想对你的所有矩形做一些事情,你可以用这样的东西来处理:
$("rect").each(function() {
... //could remove them here
}
Run Code Online (Sandbox Code Playgroud)
根据最后的评论,只要你有对象的引用,你可以使用它的变量来删除它.
这个更新的小提琴将向您显示使用lastRect您可以删除添加的最后一个矩形.
| 归档时间: |
|
| 查看次数: |
17856 次 |
| 最近记录: |