从对象jQuery中删除某些索引处的元素

时间:2019-04-14 10:01:31

标签: jquery

我有一个小问题。我有一个像这样存储在var中的jquery对象

var buttons = $(data).find('.buttons>button');

当我写出按钮时,它会向我返回:

0: button#pc_0.btn.btn-outline-dark
1: button#pc_1.btn.btn-outline-dark
2: button#pc_2.btn.btn-outline-dark
length: 3
prevObject: r.fn.init(35) [text, title, text, meta, text, meta, text, link, text, link, text, link, text, script, text, script, text, script, text, script, text, script, text, script, text, div.d-flex.justify-content-end.bg-dark.mb-3, text, div.jumbotron.jumbotron-fluid.text-center, text, div.container, text, footer.footer, text, script, text]
__proto__: Object(0)

这看起来不错。但是我的问题是我无法删除某个索引处的元素。我尝试了几种这样的方法。

$(buttons).remove('#pc_1');

$(buttons).eq(2).remove();

但是没有任何效果。谢谢您的宝贵时间。

1 个答案:

答案 0 :(得分:0)

如果您的意思是“从jQuery对象中删除”,则可以使用filter

buttons = buttons.filter(index => index !== 1);
// or
buttons = buttons.filter((_, element) => element.id !== "pc_1");
// etc.

或传入选择器:

buttons = buttons.filter(":not([id=pc_1])");
// or
buttons = buttons.filter(":not(:eq(1))");
// etc.

实时示例:

let buttons = $("button");
console.log(buttons.map((_, e) => e.id).get());
buttons = buttons.filter(":not([id=pc_1])");
console.log(buttons.map((_, e) => e.id).get());
<button id="pc_0" class="btn btn-outline-dark">0</button>
<button id="pc_1" class="btn btn-outline-dark">0</button>
<button id="pc_2" class="btn btn-outline-dark">0</button>

<script src="https://cdnjs.cloudflare.com/ajax/libs/jquery/3.3.1/jquery.min.js"></script>


您已经澄清了,是的,您的意思确实是“从jQuery对象中删除”,但是对于以后遇到此问题并回答的其他人而言:

如果您的意思是“从DOM中删除”,则您的.eq示例将使用索引1而不是2(eq基于0):

button.eq(1).remove();

或再次过滤,但这次仅保留目标元素,然后remove

buttons.filter((_, element) => element.id === "pc_1").remove();

但是,由于该特定元素具有id,因此,如果您要基于该ID进行删除,则只需执行以下操作即可:

$("#pc_1").remove();