清除svg元素的子节点而不删除event.target的最快方法

时间:2016-07-29 10:26:18

标签: javascript jquery svg

修改 如果通过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毫秒的时间内删除

1 个答案:

答案 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并用它替换旧的。