jQuery .prepend перевернул массив?

#javascript #jquery

#javascript #jquery

Вопрос:

У меня есть массив объектов, из которых я беру изображения и отображаю на странице, отображается только один раз, последний отображается первым, а первый — последним — назад. Если я использую .append(), то он находится в правильном порядке, но семантически мне нужно использовать .prepend(), чтобы мои html-элементы отображались правильно. Есть предложения по поводу того, что происходит? Я не могу найти что-либо в Интернете относительно того, что является причиной этого. Ссылка на документ, описывающий это поведение, тоже была бы отличной!

Вот код jQuery:

 for (var i = 0; i < skills.length; i  ) {
    var icon = '<img id="'   items[i].id   '" class="item-img-lg" data-toggle="modal" data-index="'  i  '"src="'   items[i].iconurl   '" />';
    $('#items-large').prepend(icon);
};
  

Комментарии:

1. .prepend() всегда будет вставлять аргумент как первый дочерний элемент родительского элемента. Я не понимаю, почему вы должны использовать .preprend() «семантически». .append() кажется, это именно то, что вам нужно: вы хотите добавить каждый элемент в массив к родительскому.

2. Спасибо. У вас была хорошая точка зрения. Я немного реорганизовал свой код в HTML, и теперь все хорошо. 🙂

Ответ №1:

Prepend не переворачивает массив. Во время первого цикла ваш первый навык добавляется в начало вашего #items-large . И это хорошо, потому что вы, вероятно, хотите, чтобы этот первый значок был первым значком в элементах -большой! Однако во время второго цикла второй значок добавляется спереди (добавляется) к #items-large . Ах! Теперь первый значок на самом деле является последним, а второй значок — первым! Это повторяется для всех ваших значков, и, в конце концов, ваш последний значок в массиве находится впереди или первым, а первый значок в массиве находится сзади или последним.

И в зависимости от того, что еще находится в #items-large , вы также можете не захотеть использовать append .

Представьте себе следующее:

 <div id="items-large">
<!-- prepended icons go here -->
    <h1>My awesome icons</h1>
<!-- appended icons go here -->
</div>
  

И добавление все равно приведет к тому же неправильному порядку значков!

Вы достаточно умны, чтобы понять, что делать дальше, но если вам нужно решение:

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

Комментарии:

1. Понял это, но спасибо за объяснение того, как добавляются элементы! Это действительно полезно. Мне нужно продолжать изучать контекст объектов!

Ответ №2:

Вместо увеличения, не могли бы вы попробовать уменьшить свой цикл или массив. отменить его, если вы решите все еще увеличивать цикл?

Ответ №3:

Вы можете «поменять местами» элементы в массиве, используя .reverse() метод.

Затем используйте .append() .

 // Reverse the array order
items = items.reverse();

for (var i = 0; i < skills.length; i  ) {
    var icon = '<img id="'   items[i].id   '" class="item-img-lg" data-toggle="modal" data-index="'  i  '"src="'   items[i].iconurl   '" />';
    $('#items-large').append(icon);
};
  

Комментарии:

1. использование метода .reverse() выдает ошибку «не функция».

2. Это items массив? Или это должно быть skills возможно?