Попытка использовать другую структуру данных массива в скрипте jQuery

0

Я наткнулся на этот случайный ротатор изображения

var theImages = new Array() 
    theImages[0] = 'img1"'  theImages[1] = 'img2"'......   
var shuffled = [];    
while (theImages.length) {
    shuffled.push(theImages.splice(Math.random() * theImages.length, 1));
}            
$(document).ready(function(){        
    //Runs Script each time there is an <li>
    $("#news li").each(function(index){                
        //Puts Image in front of everything in <li>
        $(this).prepend('<img src="'+shuffled[index]+'">');            
    });

});

И я включил его в карусель jQuery. Здесь вы можете увидеть (моя скрипка). Проблема в том, что структура массива, которую я хочу использовать для карусели, отличается от структуры ротатора. Вращатель использует:

var theImages = new Array() 
theImages[0] = 'img1"'
theImages[1] = 'img2"'
theImages[2] = 'img3"'

Но я хочу использовать следующее для карусели, потому что я хочу также ввести ссылку на каждую картинку.

var theImages = [
['img1','url_1'],
['img2','url_2'],
['img3','url_3']];

Результат, который я ищу, будет следующим:

<div id="carousel1"> 
<div class="1"><a href="url_1"><img src="img1"></a></div>
<div class="1"><a href="url_2"><img src="img2"></a></div>......

Из того, что я прочитал, я должен использовать for in loop для назначения данных и не могу просто использовать то, что использует ротатор изображения:

$("#carousel1 .1").each(function(index){    

$(this).prepend('<a href="'+imgPath+''+shuffled[index]+'"><img 
src="'+urlPath+''+shuffled[?url](?url)+'"></a>');

Это правда? Есть ли способ, который позволяет мне заполнять изображения, а также URL-адреса в карусели?

Теги:
arrays

3 ответа

2
Лучший ответ

Нет, никогда не использовать for... in для массивов. Все, что вам нужно сделать, это изменить

'<img src="'+shuffled[index]+'">'

в

'<a href="'+imgPath+shuffled[index][1]+'"><img src="'+urlPath+shuffled[index][0]+'"></a>'

поскольку путь изображения является первым элементом внутреннего массива, а ссылка является второй.

См. Access/process (вложенные) объекты, массивы или JSON для получения дополнительной информации.

(Я предполагаю, что imgPath и urlPath фактически определены где-то и содержат URL-адреса. Если нет, вы должны удалить их.)

  • 0
    Да, imgPath и urlPath определены. var imgPath = "/pic/"; var urlPath = "/url/"; , Я сделал предложенное вами изменение, но получил неопределенную ошибку. Я делаю это неправильно? играть на скрипке
  • 1
    Я не получаю никакой ошибки, но код для перемешивания массива на самом деле неверен. .splice возвращает массив удаленных элементов, поэтому вы должны добавить [0] чтобы получить первый (и единственный) удаленный элемент: shuffled.push(theImages.splice(Math.random() * theImages.length, 1)[0]); Раньше это только казалось правильным, но на самом деле shuffled представляло собой массив массивов с отдельными элементами. jsfiddle.net/YrPc7/14
1

Ваша проблема в том, что ваш исходный массив (перетасованные значения) содержит только одно значение, но в конечном итоге вы хотите иметь пары значений. Что дополнительные данные должны поступать откуда-то, компьютер не может просто придумать это.

Самый простой способ сделать это - изменить код тасования и вместо того, чтобы перетасовывать одиночные строки, вместо этого перетасовывайте пары строк.

т.е. что-то вроде

var theImages = new Array() 
theImages[0] = ['img1"', data1]
theImages[1] = ['img2"', data2]
  • 0
    Разве это не то, что ОП уже делает в var theImages = [ ['img1','url_1'], ['img2','url_2'], ['img3','url_3']]; ?
  • 0
    @FelixKling Я так не думаю, я могу ошибаться, но если я правильно читаю вопрос, он делает это без перетасовки.
0

for(var i=0;i<theImages.length;i++){
    newTheImagesArray.push([theImages[i],theImages[i]])
}

Это должно работать на то, что вы хотите

  • 0
    Что генерирует ссылку и изображение, как именно?
  • 0
    Я понял, что ссылка, прикрепленная к изображению, должна была быть к изображению. Это берет массив изображений в форме `[" url1 "," url2 "," url3 "...] 'и помещает его в форму [ "url1": "url1", "URL2": "URL2", "url3": "url3" ...]

Ещё вопросы

Сообщество Overcoder
Наверх
Меню