修改 如果通过jQuery将任何事件挂接到子元素上,则使用$ .empty,否则将发生内存泄漏。
我正在为我的SVG小部件添加捏合支持。大约有50个或更多的svg子节点。我正在使用以下代码在touchmove或pointermove期间绘制小部件。
function pinchMoveHandler(event){
var svg = this.widgetObject;
event.target.id = "";
event.target.setAttribute("opacity", 0);
//do not remove event.target during touchmove or pointermove
//If removed, event will be suspended
svg.appendChild(event.target);
while(svg.childNodes.length > 1)
svg.removeChild(svg.firstChild);
//Scaling and re-rendering operations will take place here
this.drawWidget(event);
}
问题是,svg缓慢移除(IE11中连续指针移动事件期间40毫秒),因为即使我不移动手指,指针移动也会一个接一个地触发。在JavaScript中清除SVG元素的最快方法是什么? jQuery解决方案也是可以接受的。
注意:在正常情况下,SVG在不到10毫秒的时间内删除
答案 0 :(得分:1)
jQuery解决方案;
$("#mySVG").empty();
jQuery Solution-2; (防止目标)
$(svg).children().not(':last').remove();
jQuery Solution-3; (防止目标)
$(svg).find('*').not(':last').remove();
jQuery Solution-4; (重新追加目标)
$(svg).empty().append(event.target);
建议的解决方案;
如果你没有做任何其他手术,我建议你这样做; "制作一份清晰的副本" SVG我的意思是,创建新的(空的)SVG并用它替换旧的。