我的问题一直困扰着我一段时间。
我有14个div,每次页面加载时必须分配一个随机ID(1到14之间)。 这些div中的每一个都有类" .image-box"我尝试分配的ID的格式是' box14'
我有JS代码正在分配随机ID,但我无法获得相同的ID来分配两次。
的JavaScript
var used_id = new Array();
$( document ).ready(function() {
assign_id();
function assign_id()
{
$('.image-box').each(function (i, obj) {
random_number();
function random_number(){
number = 2 + Math.floor(Math.random() * 14);
var box_id = 'box' + number;
if((box_id.indexOf(used_id) !== -1) === -1)
{
$(this).attr('id',box_id);
used_id.push(box_id);
}
else
{
random_number();
}
}
});
}
});
感谢您的帮助,
干杯
答案 0 :(得分:4)
在分配ID时,只需使用增量更新的计数器,而不是使用随机生成的数字(根据您的体验,可能会随机重复值)。
function assign_id() {
var counter = 0;
$('.image-box').each(function (i, obj) {
$(this).attr('id','image-box-' + counter++); }
});
}
答案 1 :(得分:2)
我认为这就是你想要的和DEMO
$(document).ready(function() {
assign_id();
});
function assign_id() {
var numberOfDiv = $('.image-box').length;
var listOfRandomNumber = myFunction(numberOfDiv);
$('.image-box').each(function(i, obj) {
$(this).attr("id",listOfRandomNumber[i]);
});
};
//Getting List Of Number contains 1 to the number of Div which is
//14 in this case.
function myFunction(numberOfDiv ) {
for (var i = 1, ar = []; i < numberOfDiv +1 ; i++) {
ar[i] = i;
}
ar.sort(function() {
return Math.random() - 0.5;
});
return ar;
};
答案 2 :(得分:0)
我建议你有一个像user_id这样的全局数组,并将指定的div id推入数组。然后你可以在将随机id分配给div之前进行检查。如果分配使用不同的。
希望这有帮助。
干杯。
答案 3 :(得分:0)
如果您要做的只是分配唯一值,最好使用增量值(或类似(new Date).getTime())。但是,如果由于某种原因,你必须有随机选择的值(仅从1到14),那么使用这样的东西来选择唯一/随机值
var arrayId = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14];
function getRandomId(array) {
var randomIndex = Math.floor(Math.random() * (array.length));
var randomId = array.splice(randomIndex, 1);
return randomId[0];
}
现在getRandomId(arrayId)
将从数组中返回一个随机选择的值,然后删除该值,以便不重复该值。
答案 4 :(得分:0)
首先介绍如何使用我的实现:
var takeOne = makeDiminishingChoice(14);
在这种情况下,takeOne
是一个函数,您最多可以调用14次以获得1到14之间的唯一随机数。
例如,这将以随机顺序输出1到14之间的数字:
for (var i = 0; i < 14; i++) {
console.log(takeOne());
}
以下是makeDiminishingChoice
本身的实现:
var makeDiminishingChoice = function (howMany) {
// Generate the available choice "space" that we can select a random value from.
var pickFrom = [];
for (var i = 0; i < howMany; i++) {
pickFrom.push(i);
}
// Return a function that, when called, will return a value from the search space,
// until there are no more values left.
return function() {
if (pickFrom.length === 0) {
throw "You have requested too many values. " + howMany + " values have already been used."
}
var randomIndex = Math.floor(Math.random() * pickFrom.length);
return pickFrom.splice(randomIndex, 1)[0];
};
};