Я опубликую свой ответ, но если @epascarello предоставит один после, я с удовольствием его сниму, так как он предоставил основы того, что я показываю, и я работал над предоставлением работающей скрипки
Прежде всего, я бы, вероятно, не использовал контент, определенный в HTML, в качестве источника ваших списков (текста и изображений).Для их хранения я использовал какие-то массивы.
var textList = ['Elephant', 'Dog', 'Cat'];
var imgList = ['pic1.jpg', 'pic2.jpg', 'pic3.jpg']
Предполагая, что ваши массивы всегда будут содержать одинаковое количество данных (т.е. всегда будут иметь одинаковую длину), вы можете просто зациклить длинуодин и выберите случайный из каждого массива и сгенерируйте ваш HTML оттуда:
var textList = ['Elephant', 'Dog', 'Cat'];
var imgList = ['pic1.jpg', 'pic2.jpg', 'pic3.jpg'];
var randomImgIndexArr = generateUniqueIndexArray([], imgList);
var randomTextIndexArr = generateUniqueIndexArray([], textList);
function generateUniqueIndexArray(array, list) {
while(array.length < list.length) {
var randomIndex = Math.floor(Math.random() * list.length);
if(array.indexOf(randomIndex) === -1) array.push(randomIndex);
}
return array;
}
textList.forEach(function(item, index) {
var textStr = textList[randomTextIndexArr[index]];
var image = imgList[randomImgIndexArr[index]];
var li = $('<li/>');
var aHref = $('<a/>', { href: textStr + '_' + image, text: textStr });
var imgElm = $('<img/>', { src: image, id: image });
$(li).append(aHref).append(imgElm).appendTo($('ul'));
});