假设我有一个节点列表:list = document.querySelectorAll('div');
我想洗牌。我该怎么做?
我遇到的唯一答案,here 建议使用以下方法将节点列表转换为 array
var arr = [].concat(x);
类似地, MDN 建议如下(将 NodeList 转换为 array
):
var turnObjToArray = function(obj) {
return [].map.call(obj, function(element) {
return element;
})
};
我的问题是,如果不将 NodeList 转换为数组,就没有办法做到这一点吗?
还有,以上两种方法哪个更好?
而且,一旦将 NodeList 转换为数组,当您对数组的某些成员进行操作时会发生什么变化吗? (即从数组中删除一个节点是否将其从 NodeList 中删除)?
最佳答案
如果您需要就地更改元素的顺序,这可能对您有所帮助
var list = document.querySelector('div'), i;
for (i = list.children.length; i >= 0; i--) {
list.appendChild(list.children[Math.random() * i | 0]);
}
工作 jsBin
旁注: concat() 通常较慢
关于javascript - 如何混洗 NodeList,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/25175798/