繁体   English   中英

如何一起选择每个数据属性的随机值来选择随机单元格?

[英]How can I choose a random value of each data attribute together to choose a random cell?

我有一个动态创建的表,并为每个单元格的行和列属性赋予它们 0-9(10X10 表)之间的数字,称为 data-x、data-y。 我想要 select 一个随机数据-x 和数据-y(有一个 class 为空),然后将该单元格分配给另一个 class。我知道我可以通过随机选择单元格本身来以更简单的方式完成它但是由于某种原因,它需要以这种方式完成。

我为 0-9 之间的随机数创建了变量,但真的不知道它们如何连接到我的 data-x/y 以执行上述操作。

谁能就最简单的方法给我建议?

谢谢

 $( document ).ready(function() { var body = document.getElementsByTagName("body")[0]; var table = document.createElement('TABLE'); var tblB = document.createElement('TBODY'); table.appendChild(tblB); var num = [1]; for (var i = 0; i <10; i++) { var tr = document.createElement('TR'); tblB.appendChild(tr); $(tr).attr('data-x', i) for (var j=0; j<10; j++) { var td = document.createElement('TD'); tr.appendChild(td); td.append(num++); $(td).attr('data-y', j); } } body.appendChild(table); var randomRow = Math.floor(Math.random() * 9); var randomCol = Math.floor(Math.random() * 9); //How to select a <td> of random data-x,data-y with these randomRow and randomCol numbers //$(td).??? console.log(randomCol, randomRow); //Give all cells a class of empty to start $("td").addClass('empty'); var obs = 0; while (obs <= 10) { //Find random row and column that has class empty, add Class(dimmed) to that random row and column (eg. 2 1) // var randomRow = Math.floor(Math.random() * 9); // var randomCol = Math.floor(Math.random() * 9); // console.log(randomNum + randomCol); obs++ } })
 table td { padding: 25px; border: 5px solid red; } table { margin: auto; }.dimmed { background: black; }
 <html lang="en"> <head> <meta charset="UTF-8"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <title>Document</title> <link rel="stylesheet" href="style.css"> <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.4.1/jquery.min.js"></script> <script src="script.js"></script> </head> <body bgcolor="lightblue"> <center> <h1>Create table in a dynamic way using javascript</h1> </center> <CENTER> <div id=TBL></div> </CENTER> </body> </html>

如果你的 x 和 y 总是从 0 到 9 迭代,你真的不需要添加这些属性,因为你的行和单元格已经被索引了。

正如您似乎使用 jquery 一样,这只是在没有任何属性的情况下工作:

var randomRow = Math.floor(Math.random() * 9);
var randomCol = Math.floor(Math.random() * 9);

$("#TBL tr:eq(" + randomRow + ") td:eq(" + randomCol + ")").removeClass("empty").addClass("newclass");

或者为了在现代浏览器中获得更好的性能

$("#TBL tr").eq(randomRow).children("td").eq(randomCol)

获得有关您想要实现的目标的更多信息,我最好构建一个数组:

var cells = array[];
while (cells.length < 10) {
    var cell = Math.random() * 99;
    if(!cells.includes(cell)) cells[] = cell;
}

cells.foreach(function(item) {
    $("#TBL td").eq(item).removeClass("empty").addClass("newclass");
});

您构建了一个具有 10 个唯一单元格编号的 10-len 数组; 然后为数组的每个元素标记对应的单元格。 请注意td选择器而不是tr ,它将检索单个集合中的所有单元格。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM