2014-06-04 5 views
0

Как удалить один NodeList из другого? Например, если у меня есть:Удалить NodeList из другого NodeList

var all = document.querySelectorAll('*'); 
var divs = document.querySelectorAll('div'); 

var removed = all - divs; 

Это не работает. Каков правильный метод для этого, а результат - нодлист, а не массив?

+0

Почему это работает? Можете ли вы показать нам, что еще вы пробовали? – elclanrs

ответ

1

Вы можете превратить allnodeList в массив, а затем использовать методы массива, чтобы сделать поиск и удалений:

var all = Array.prototype.slice.call(document.querySelectorAll('*'), 0); 
var divs = document.querySelectorAll('div'); 

for (var i = 0; i < divs.length; i++) { 
    var pos = all.indexOf(divs[i]); 
    if (pos !== -1) { 
     all.splice(pos, 1); 
    } 
} 

Это требует IE9 (для .indexOf()), или вы можете использовать polyfill, чтобы заставить его работать в старых версии IE, или вы можете создать свою собственную функцию, которая выполняет итерацию через массив, чтобы найти, соответствует ли элемент.


На второй мысли, есть немного более простой способ сделать это:

var all = Array.prototype.slice.call(document.querySelectorAll('*'), 0); 
for (var i = all.length - 1; i >= 0; i--) { 
    if (all[i].tagName === "DIV") { 
     all.splice(i, 1); 
    } 
} 
+0

не должно быть наоборот? for (var i = 0; i user3143218

+0

Это занимает каждый div, ищет его в списке 'all' и удаляет его, если найден. – jfriend00

+0

@ user3143218 - Я добавил еще один способ, который просто перемещает все элементы из списка 'all', у которого есть' 'DIV '' tagName. – jfriend00

0
var all = document.querySelectorAll('*'); 
var divs = document.querySelectorAll('div'); 

var removed = all.filter(function(i){ 
    return divs.indexOf(i) < 0; 
}); 
Смежные вопросы