Первый, добавьте свое имя в список. Вы не должны рассчитывать такой длинный селектор DOM каждый раз для доступа к известному объекту.
Если вам нужно сохранить определенное значение, используйте атрибут data
.
<img class="sogSelectImage" src="1.png" data-songId="1" />
Теперь, вы можете получить доступ к нему с помощью такого запроса:
$(".sogSelectImage[data-songId='" + arrsong[i].songid + "']").attr("src", "2.png");
Это точно должно работать быстрее.
Если вы делаете это в цикле, вы даже можете сделать это следующим образом:
$(".sogSelectImage").each(function() {
var songId = $(this).data('songId');
$(this).attr("src", "something_else.png");
});
или используя свой for
петлю таким образом (что хуже с точки зрения производительности):
var images = $(".sogSelectImage");
for (int i = 0; i < arrsong.length; i++)
{
images.find("[data-songId='" + arrsong[i].songId + "']").attr('src', '2.png');
}
Также, если вы измените то же самое изображение для всех ваших img
s, не сделайте это один за другим. Используйте классы.
// CSS
.sogSelectImage {
background-image: url('1.png');
background-position: center center;
background-size: cover;
background-repeat: no-repeat;
}
.sogSelectImage.sogSelectImage-add {
background-image: url('./images/icon_add_active.png');
}
// JS
$(".sogSelectImage").addClass("sogSelectImage-add");
Во всяком случае, как я предполагаю, что проблема в том, что вы вычислить DOM селектор 5 элементов каждый раз в цикле. Это не хорошо.
Это быстрее, чем 6-7 раз. –