这个问题可以简化为:
- 你有一个容器
- 您在该容器中有一个元素,其中:
- 应该删除该元素之前的所有内容
- 应该(部分)删除包含该元素的元素
- 拆分元素本身应该被移除
这可以递归完成,您可以简化初始容器的子容器的问题,直到您从 DOM 中删除了要删除的所有元素。.contents()
返回一个包含所有节点(包括 TextNodes)的对象。.each()
循环遍历此类对象中的所有元素。回到false
那里会提前停止这个循环。$.contains(...)
当第二个参数中的元素在第一个参数中的元素中时为真。
var start = document.getElementById('start');
var splitpoint = document.getElementById('splitpoint');
function removeUntil( parent, split ) {
$(parent).contents().each( function( index, elem ) {
if( elem == split ) {
parent.removeChild( elem );
return false;
} else if( $.contains( elem, split ) ) {
removeUntil( elem, split );
return false;
} else {
parent.removeChild( elem );
}
} );
}
removeUntil( start, splitpoint );