3

我试图弄清楚如何为 16 个不同的 div 提供存储在 16 个元素长数组中的 id 名称。

这样我就可以为记忆游戏随机化 div 的“放置”,因为如果可能的话,将会有 8 种不同的 div 样式随着 div id 的变化而变化。

我的计划是 div id 的名称与该特定 div 的样式名称相同。

有什么办法可以将第一个div的id和style设置为myarray[0]中的值,第二个div的id和style设置为myarray[1],以此类推?

编辑:

var card = ["orange","orange","pink","pink","red","red","purple","purple",
"blue","blue","green","green","brown","brown","yellow","yellow"];

for(var j, x, i = card.length; i; j = parseInt(Math.random() * i),
x = card[--i], card[i] = card[j], card[j] = x);

然后稍后在正文中,我试图实现代表这一点的东西:

<div id="card[0]"></div>
<div id="card[1]"></div>
<div id="card[2]"></div>

等等...

4

4 回答 4

7

这是使用纯 JavaScript 随机化类名的解决方案。

更新的答案

既然问题已经澄清,我已经更新了我的解决方案,它适合你的颜色。我已将s 设置background-color.card数组中设置的颜色。这也可以很容易地完成id,我建议不要在其中使用[]字符,id因为我认为我不确定这是否符合标准。

jsFiddle

在此处输入图像描述

var colors = [
    "orange","orange","pink","pink","red","red","purple","purple",
    "blue","blue","green","green","brown","brown","yellow","yellow"
];

var divs = document.getElementsByClassName("card");

while (divs.length > 0) {
    var i = Math.floor(Math.random() * colors.length);
    divs[0].style.backgroundColor = colors[i];
    colors.splice(i, 1);
    divs = [].slice.call(divs, 1);
}

原始答案

给定一个 id 数组和一组 HTML 元素,将随机id分配给来自ids.

jsFiddle

在此处输入图像描述

JavaScript

var ids = ["1", "2", "3", "4", "5", "6", "7", "8", "9", "10"];
var divs = document.getElementsByClassName("game-element");

while (divs.length > 0) {
    var i = Math.floor(Math.random() * ids.length);
    divs[0].id = 'item-' + ids[i];
    ids.splice(i, 1);
    divs = [].slice.call(divs, 1);
}

HTML

<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>
<div class="game-element"></div>

CSS

.game-element {
    width:10px;
    height:10px;
    float:left;
}

#item-1  { background-color:#F00; }
#item-2  { background-color:#0F0; }
#item-3  { background-color:#00F; }
#item-4  { background-color:#FF0; }
#item-5  { background-color:#F0F; }
#item-6  { background-color:#0FF; }
#item-7  { background-color:#A0A; }
#item-8  { background-color:#0AA; }
#item-9  { background-color:#AA0; }
#item-10 { background-color:#000; }
于 2013-03-23T14:01:06.213 回答
2

为每个 div 分配一个randomdiv类或类似的东西。这将确保您可以在不影响其他 div 的情况下选择您想要的那些。

然后你可以这样做

var idArr = [/**random ids here**/];
$( ".randomdiv" ).each(function( index ) {
  $(this).attr("id",idArr[index]);
});

这将使用类遍历每个 divrandomdiv并为其分配一个值idArr,您可以根据需要定义该值,我想为您的用例使用某种类型的随机化函数

更新

随着您对问题的更新,我看到了一个问题。您有要设置的非唯一 ID。id 必须是唯一的。如果你想将它们中的多个分配为相同的,你想使用类。所以代码看起来像这样

var card = ["orange","orange","pink","pink","red","red","purple","purple",

"蓝色","蓝色","绿色","绿色","棕色","棕色","黄色","黄色"]; $( ".randomdiv" ).each(function( index ) { $(this).addClass(card[index]); });

然后你可以像这样用css定义你想要的样式

.randomdiv.blue{
  background-color:blue;
}

.randomdiv.green{
  background-color:green;
}
...
于 2013-03-23T13:48:26.650 回答
1

很难确切知道你在追求什么,但如果使用 jQuery,你可以这样做:

HTML:

<div class="random"></div>
<div class="random"></div>
<div class="random"></div>

JavaScript:

var myarray = ["one","two","three"];    

// loop through all divs
$('div.random').each(function(index) {

    // set div id to array value
    $('div').attr('id', myarray[index]);

});

结果:

<div class="random" id="one"></div>
<div class="random" id="two"></div>
<div class="random" id="three"></div>

附加评论:

值得确保或至少检查数组长度是否等于div元素的数量,否则您可能会收到异常。

于 2013-03-23T13:48:39.277 回答
-1

您的页面可以在服务器端或客户端呈现

1) 在服务器端,使用服务器端语言(例如 C#)和框架(例如 ASP.NET)更容易

2) 在客户端,您可以基于任何 JavaScript 模板(例如下划线模板)生成 DOM,并通过将数组作为数据模型传递来呈现它)您可以参考下划线模板方法:http ://underscorejs.org/#template

编辑

对于服务器端的示例(我使用 C# 和 MVC razor 视图作为示例,但如果您使用任何其他语言和 Web 服务器,它可能是相同的想法)。

@{ ids = ... }
@foreach (var id in ids) 
{
  <div id="@id"></div>
}

该代码将帮助您生成具有您定义的 id 的 div。

在客户端(我使用下划线模板,但如果您使用任何其他引擎,同样的想法)

var list = "_.each(ids, function(id) {<div id='<%id%>'></div>});";
_.template(list, {ids: ['id1', 'id2', 'id3']});

这将生成 3 个 div,其中列出了 id。

更新

最好在生成div的时候生成id,而不是先生成div再修改id。

于 2013-03-23T13:49:20.277 回答