簡體   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