У меня есть этот код, который извлекает случайную текстовую ссылку, используя getJSON. Он выбирает один случайный предмет за раз. Я хотел бы знать, как выбрать несколько разных элементов и показать их в #randomkeyword
. Все, что я могу придумать, это настроить сценарий два раза, но я думаю, что у него может быть шанс собрать один и тот же элемент. Есть ли способ сделать это?
jQuery.getJSON('random.json', function(data) { //Ajax call
var item = data.link[Math.floor(Math.random()*data.link.length)];
jQuery('<a title="' + item.des + '" href="http://' + item.url + '">'+ item.title +'</a>').appendTo
('#randomkeyword');
});
JSON Файл:
{"link":[{"title":"XXXX","url":"google.com","des":"light"},{"title":"CCCCCCC","url":"yahoo.com","des":"dark"},{"title":"DDDDDDDD","url":"song.com","des":"light"},{"title":"CCCCCCCCCCCCCCC","url":"googlemap.com","des":"normal"},{"title":"RRRRRRRRRRRRRRR","url":"fun.com","des":"halo"}]}
Чтобы избежать дублирования, вы можете "перетасовать" список, а затем просто пропустить его с самого начала.
Вы можете проверить, совпадает ли второй элемент с первым элементом. Если это так, вы можете выбрать другой случайный элемент.
jQuery.getJSON('random.json', function(data) { //Ajax call
var item = data.link[Math.floor(Math.random()*data.link.length)];
var item2=item;//set second item same as first item to access the while loop
while(item==item2){
item2 = data.link[Math.floor(Math.random()*data.link.length)];
}
jQuery('<a title="' + item.des + '" href="http://' + item.url + '">'+ item.title +'</a>').appendTo
('#randomkeyword');
});
//do the same for item2
jQuery('<a title="' + item2.des + '" href="http://' + item2.url + '">'+ item2.title +'</a>').appendTo('#randomkeyword');
немного?
Итак, я думаю, что вы можете сохранить список, а затем просто перебирать его, сколько бы вы ни захотели, splice
выбранные, когда вы идете (чтобы избежать дубликатов), а затем запустите jQuery для каждого элемента массива результатов. Обратите внимание, что это модифицирует возвращаемый массив, поэтому сначала сделайте его копию, если вам это нужно.
Например:
var data = ['one', 'two', 'three'];
var numOfLinks = 2;
var result = [];
for(i = 0; i < numOfLinks; i++) {
var index = Math.floor(Math.random()*data.length);
var link = data[index];
data.splice(index,1);
result.push(link);
}
// iterate over result, doing your jQuery function over each element