jquery 如何在每次重载时重新排列div的顺序?

wwodge7n  于 2023-01-20  发布在  jQuery
关注(0)|答案(6)|浏览(178)

有没有重新排列div顺序的方法?更确切地说,我如何从

<div id="1"></div>
<div id="2"></div>
<div id="3"></div>
<div id="4"></div>

这个

<div id="3"></div>
<div id="1"></div>
<div id="4"></div>
<div id="2"></div>

或者在每次重新加载时的任何其它顺序。

kyvafyod

kyvafyod1#

就这么简单

$("#parent").html($("#parent").children().sort(function() { return 0.5 - Math.random() }));

下面是工作示例http://jsfiddle.net/CPQXw/1/

ijxebb2r

ijxebb2r2#

请参见:http://jsfiddle.net/KfY4u/

$("div.container div").sort(function(){
    return Math.random()*10 > 5 ? 1 : -1;
}).each(function(){
    var $t = $(this);
    $t.appendTo( $t.parent() );   
});

这适用于任意数量的div标记

r7knjye2

r7knjye23#

另一个片段:
http://jsfiddle.net/t8gU7/

var $divs = $('#container div');
for(var j, x, i = $divs.length; i; j = parseInt(Math.random() * i), x = $divs[--i], $divs[i] = $divs[j], $divs[j] = x);
$('body').append($divs);
1tuwyuhd

1tuwyuhd4#

像这样?

var ids = [], max = 4, i = 0, rand = 0;

while(i < max){
    do{
      rand = Math.floor(Math.random() * max); 
    } while(ids.indexOf(rand) < 0)
    ids.push(rand);
    i++;
}
ztyzrc3y

ztyzrc3y5#

我假设你有一个数组,其顺序如下:变量顺序=[3,1,4,2];现在,我假设您有一个容器div用于div,如下所示:

<div id="container">
  <div id="1"></div>
  <div id="2"></div>
  <div id="3"></div>
  <div id="4"></div>
</div>

您应该如何继续:从末尾到开头遍历数组,并将带有相应id的每个div前置到"container" div:

$(document).ready(function() {
  var order = [3, 1, 4, 2];

  for(var i=order.length-1; i>=0; i--) {
    $('#container').prepend($('#'+order[i]));
  }
});

好好享受吧!
编辑:我对这个问题的理解是如何重新排列div而不是如何生成一个新的随机顺序!抱歉,如果我错过了重点,但这正是你在问题中问的。

fkaflof6

fkaflof66#

Vanilla Javascript ES6是完成此任务的最佳选择。实现基于提供的HTML结构。

let divs = document.querySelectorAll("div");
let randomDiv = Array.from(divs).sort(() => {
  return 0.5 - Math.random();
});
document.body.innerHTML = "";
randomDiv.map((x) => {
  document.body.innerHTML += `<div 
    id=${x.id}>${x.textContent}</div>`
});
<body>
  <div id="1">1</div>
  <div id="2">2</div>
  <div id="3">3</div>
  <div id="4">4</div>
</body>

相关问题