首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何洗牌NodeList

如何洗牌NodeList
EN

Stack Overflow用户
提问于 2014-08-07 06:43:59
回答 2查看 2.4K关注 0票数 5

假设我有个Nodelist:

list = document.querySelectorAll('div');

我想洗牌。我该怎么做?

我遇到的唯一答案是,这里建议将节点列表转换为array

var arr = [].concat(x);

类似地,MDN建议如下(将NodeList转换为array):

代码语言:javascript
复制
var turnObjToArray = function(obj) {
  return [].map.call(obj, function(element) {
    return element;
  })
};

我的问题是,如果不将NodeList转换为数组,就没有办法做到这一点吗?

以上两种方法中哪一种更好?

而且,一旦您将一个NodeList转换成一个数组,当您对该数组的某些成员进行操作时,会发生什么变化吗?(即从数组中删除一个节点是否从NodeList中删除)?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-08-07 07:44:30

如果您需要更改原处元素的顺序,这可能对您有所帮助。

代码语言:javascript
复制
var list = document.querySelector('div'), i;
for (i = list.children.length; i >= 0; i--) {
    list.appendChild(list.children[Math.random() * i | 0]);
}

工作jsBin

附带注意:一般来说,concat()比较慢。

票数 5
EN

Stack Overflow用户

发布于 2018-08-17 02:33:28

一个现代的选择可能是使用CSS或Flexbox属性。这种方法的优点是可以通过简单地移除样式来撤消它。

代码语言:javascript
复制
    var Scramble = function(){
        [].slice.call( document.querySelectorAll(".myClass") ).filter( function( _e ){
            _e.style.order =  (Math.floor(Math.random() * (10) + 1));
        } );
    }
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/25175798

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档