jQuery - 在特定子元素之前删除所有子元素

3

JSFiddle: https://jsfiddle.net/9krvkfpw/

你好,

我想删除某个节点之前的所有子元素,但是不确定最有效的方法。

以下是示例代码:

<div id="container">
    <div id="el1">Remove</div>
    <div id="el2">Remove</div>
    <div id="el3">Remove</div>
    <div id="el4">Remove</div>
    <script type="text/javascript">
    // Keep
    </script>
    <div id="lastEl">Keep</div>
</div>

基本上,我想做的是删除脚本元素上面的所有元素。 我不能只找到第一个脚本元素,因为有时会有更多在我想保留的那个上面,所以它们会妨碍。

我的想法是通过命中#lastEl并获取前一个元素来获取脚本标记。

像这样:

var script = $('#container').children('#lastEl').prev();

从这里开始,我不确定继续的最佳方式是什么,或者这是否是最佳方式?

我可以像 script.prev().remove() 这样做多次,但这并不总是有效,因为在我开始的脚本之前的元素数量总是不同的。

任何想法都很好!

谢谢!


1
请查看prevAll() - Frédéric Hamidi
尝试使用 $('#container').find('#lastEl').prev().prevAll().remove() - guradio
3个回答

4

回答您的问题:

本质上,我想要做的是删除脚本元素上方的所有元素。

你可以这样做:

$('#container script').prevAll().remove();

Fiddle


0

prevAll 是你要找的:

$("#lastEl").prevAll("div").remove();

他需要在 .prevAll() 之前再加一个 .prev() 来保留 script - guradio
不是这样的,@guradio。这是prevAlldiv的作用。 - eisbehr
我错过了那一个 :) - guradio
如果存在其他类型的元素,你应该列出所有情况,否则这样做不太好。 - George G
是的,你说得有道理。但另一方面,这也可能很好。当你有其他元素需要保留,或者有第二个script需要改变其他方法时... @GeorgeGarchagudashvili - eisbehr

0

$('#container').find('#lastEl').prev().prevAll().remove()
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<div id="container">
    <div id="el1">Remove</div>
    <div id="el2">Remove</div>
    <div id="el3">Remove</div>
    <div id="el4">Remove</div>
    <script type="text/javascript">
    // Keep
    </script>
    <div id="lastEl">Keep</div>
</div>

尝试这个方法


这是正确的并且可行的,但为什么不直接使用 $("#lastEl") - eisbehr
@eisbehr,我只是修改了原始代码中的一些东西 :) - guradio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接