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

标签 javascript jquery

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

我为 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 个唯一的单元格编号;然后,对于数组的每个元素,标记相应的单元格。请注意 td 选择器而不是 tr 将检索单个集合中的所有单元格。

关于javascript - 如何一起选择每个数据属性的随机值来选择随机单元格?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/63151018/

相关文章:

Javascript:通过引用对象参数,理解赋值差异

javascript - 通过 POST 将 JavaScript 变量发送到 PHP

javascript - Python 类 JavaScript 中的函数模拟

javascript - 如何让特定的JS脚本只对特定页面起作用

jquery - Bootstrap V 形图标在单击时没有改变,为什么?

javascript - jQuery 数据表发送 JSON 搜索参数

javascript - Express:请求的模块不提供名为 'User' 的导出

java - 如何知道mysql表中数据被更新(即数据删除、修改或插入),从而更新java中的json对象

javascript - 单击时向文本框添加值

jquery - 延迟加载js时$(document).load()和$(document).ready()的顺序