(如何)我可以选择数组中的所有元素,并通过math.random选择一个随机元素吗?

时间:2015-12-26 20:14:06

标签: javascript css select display

大家好我是编程新手,这是我在stackoverflow上的第一篇文章,我正在开发一款涉及从数组中抽取随机卡的小游戏。

想象一下这样的数组:

var cards = [document.getElementById("c1"),
         document.getElementById("2"),
         document.getElementById("3"),
         document.getElementById("4"),
        ];

现在我有以下代码从数组中生成随机变量:

var randomNum = Math.floor((Math.random() * cards.length));

我用:

document.getElementById(randomNum);

选择随机变量。

现在我想选择数组中的所有其他变量并给它们以下代码,这样一次只能在屏幕上显示一张卡片:

.style.display: "none";

这甚至可能吗?非常感谢!

3 个答案:

答案 0 :(得分:0)

您可以通过为所有卡片元素指定一个公共类,然后将display样式设置为空或 none 取决于它是否匹配来做到最好:



document.getElementById('btn_rnd').addEventListener('click', function () {
    // get array of elements that have the "card" class:
    var cards = document.querySelectorAll('.card');
    // pick a random number:
    var randomNum = Math.floor((Math.random() * cards.length));
    // show only that card:
    for (var i = 0; i < cards.length; i++) {
        cards[i].style.display = (i == randomNum ? '' : 'none');
    }
});
&#13;
<div id="c1" class="card">card 1</div>
<div id="c2" class="card">card 2</div>
<div id="c3" class="card">card 3</div>
<div id="c4" class="card">card 4</div>
<button id="btn_rnd">pick one randomly</button>
&#13;
&#13;
&#13;

按下按钮后上面的随机选择。

如果你定义一个像这个按钮点击的事件处理程序,请确保将该javascript放在文档末尾附近,以确保它找到按钮(或绑定事件处理程序的任何元素)。

答案 1 :(得分:0)

HTML:

<div class="card"></div>
<div class="card"></div>
<div class="card"></div>
<div class="card"></div>

<button id="play">Play !</button>

CSS:

.card {
  height: 50px;
  width: 50px;
  background-color: red;
  margin: 5px;
}

div {
  display: none;
}

使用纯Javascript:

(function() {

  var cards = document.getElementsByClassName('card');

  var play = document.getElementById('play');

  play.addEventListener('click', function() {
    cards[Math.round(Math.random() * 3)].style.display = 'block';
  });

})();

使用JQuery:

$(document).ready(function() {
    $('#play').click(function() {
    var card = $('.card').get(Math.round(Math.random() * 3));
    $(card).show();
  });
});

JSFiddle

答案 2 :(得分:0)

  • 选择所有卡片:
    document.querySelectorAll('#holder .card')

  • 选择一张随机卡:
    document.querySelector('#holder .card:nth-child(' + (1 + randomNum) + ')')

  • 选择除一个随机的所有卡片:
    document.querySelectorAll('#holder .card:not(:nth-child(' + (1 + randomNum) + '))')

要应用样式,只需循环遍历第三个选择器的结果:
for (var a = cards.length - 1; a >= 0; a--) cards[a].style.display = 'none';