追加后如何删除文档片段中的元素

how to remove elements in document fragment after append

我正在开展一个 javascript 项目,在该项目中,我使用文档片段一次附加多个跨度元素。然后他们用 css.

动画
.redCircle {
    float: left;
    height:20px;
    width:20px;
    border-radius:10px;
    box-shadow: 0 0 20px red;
    background-color: red;
    animation: 2s circleFall linear;
}

@keyframes circleFall {
    0%{margin:0;}
    100%{margin:100% 10%;}
}


setInterval(thingyTime, 5000);

function thingyTime() {
    var count = 15,
        spanVar = document.createElement("span"),
        fragment = document.createDocumentFragment();

    for (var i = 0; i < count; ++i) { 

        for (var j = 0; j < 1; ++j) { 
            spanVar = document.createElement('spanVar');
            spanVar.className = "redCircle";
            fragment.appendChild(spanVar);
        }
    }

    document.body.appendChild(fragment);

};

thingyTime();

我想弄清楚如何在动画完成后删除跨度。我用过

setTimeout(function(){

    spanVar.remove(spanVar.selectedIndex);

},2000); // <= animation length

当它只针对一个元素时它工作正常,但我需要删除片段中的所有元素。

感谢您的帮助。

因为您已经指定了 class:

spanVar.className = "redCircle";

您可以使用它来 select 所有这些元素并删除它们:

$('.redCircle').remove();

一些(我最初评论的补充)。对于生成,我会把额外的 createElement("span") 放在顶部,因为它永远不会被使用。然后在循环中创建跨度,而不是 spanVar(假设不需要)。对于创建元素方法,您只需为其指定您想要创建的元素类型。

function thingyTime() {
    var count = 15,
        spanVar,
        fragment = document.createDocumentFragment();

    for (var i = 0; i < count; ++i) { 
        for (var j = 0; j < 1; ++j) { 
            spanVar = document.createElement('span');
            spanVar.className = "redCircle";
            fragment.appendChild(spanVar);
        }
    }
    document.body.appendChild(fragment);
};

对于清理,最简单的方法就是使用您创建的 class。全部查询,然后一一核对。

document.querySelectorAll(".redCircle").forEach(function(c){
    c.parentNode.removeChild(c);
});

另一方面,如果您有 redCircle 的其他实例,则您不想使用核武器。我会添加一个 var circlesToCleanup = []; 然后在创建循环中将每个 em 推到它上面 circlesToCleanup.push(spanVar)

然后当您调用清理时,迭代 circlesToCleanup 而不是 querySelector 输出。