从页面中删除除数组中包含的元素及其父/子之外的所有元素?

时间:2015-02-04 20:52:21

标签: javascript jquery

我想在这个生成的页面上保留一系列元素。棘手的部分是我需要保留父母和孩子的这些元素。

var maps = document.querySelectorAll("[id^=map]")

我想使用jQuery的过滤器从页面中删除除数组中包含的div之外的所有div。虽然我无法让它工作。我试过了:

var all = $("div").get()

$(all)
  .filter(function( index ) {
      return $.inArray(this, maps) === -1;
  }).remove()

删除了页面中的每个元素。我认为无论孩子是否需要,它都在消除父母和他们的孩子。我尝试在函数中添加另一个过滤函数,添加一些嵌套条件,但它开始成为一个巨大的非功能性混乱。有没有更优雅的方式来做到这一点?我不一定需要使用.filter()

2 个答案:

答案 0 :(得分:2)

部分原因可能是您没有从过滤器功能中返回值。

但如果我理解正确,你可以看看元素及其所有内容:

$(all)
  .filter(function( index ) {
      $this = $(this);
      return !($this.is("[id^=map]") || $this.find("[id^=map]").length > 0);
  }).remove()

答案 1 :(得分:1)

您可以尝试首先使用复杂的css选择器,如下所示:

$('div:not(div:has(.keep), div.keep)').remove();

http://jsfiddle.net/e_neko/k0bq6gzx/ 这将找到所需的元素,并在一次传递中删除其他元素。