У меня есть следующая функция JavaScript, в которой я подсчитываю общее количество divs с помощью classname, но не все должны быть изменены, что указано в параметре количества. Итак, есть 4 класса, поэтому каждый подсчитывает классы, а затем цикл for изменяет их в соответствии с параметром количества.
Тем не менее, это, похоже, не работает, см. Также закомментированную версию -
function changeImages(change, amount) {
var $projImg = $('.proj-img');
$.each($projImg, function(i) {
$(this).attr('src', 'src/img/' + change + 'Slide' + (i + 1) + '.png');
});
// $.each($projImg, function (j) {
// for(var i = 0; i < amount; i++){
// $(this).attr('src', 'src/img/' + change + 'Slide' + (i) + '.png');
// }
// });
}
не могли бы вы поделиться своим путем к изображению, который вы устанавливаете в attr ()



![Безумие обратных вызовов в javascript [JS]](https://i.imgur.com/WsjO6zJb.png)


Вы можете использовать массив, а затем slice, чтобы он содержал не больше, чем количество элементов amount, jQuery не требуется:
function changeImages(change, amount) {
const projImgs = [...document.querySelectorAll('.proj-img')]
.slice(0, amount);
projImgs.forEach((img, i) => {
img.src = 'src/img/' + change + 'Slide' + (i + 1) + '.png';
});
}
Просто используйте jQuery .slice():
function changeImages(amount) {
const $matches = $('.foo').slice(0, amount);
$matches.addClass('bar');
}
changeImages(10);.foo {
border-bottom: 8px solid red;
}
.bar {
border-color: cyan;
}
.foo:hover {
border-color: black;
}<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<div class = "foo"></div>
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Тогда ваш JS-код будет выглядеть так:
function changeImages(change, amount) {
$('img').slice(0, amount).each((i, el) => {
el.setAttribute('src', `https://place-hold.it/200x200&text=${ change }-${ i + 1 }`);
});
}
changeImages('UPDATED', 3);body {
margin: 0;
}
img {
float: left;
max-width: 20vw;
}<img src = "https://place-hold.it/200x200&text=DEFAULT" />
<img src = "https://place-hold.it/200x200&text=DEFAULT" />
<img src = "https://place-hold.it/200x200&text=DEFAULT" />
<img src = "https://place-hold.it/200x200&text=DEFAULT" />
<img src = "https://place-hold.it/200x200&text=DEFAULT" />
<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>Кроме того, что касается :lt(), имейте в виду, что это не является частью спецификации CSS, как указано в документации:
Because
:lt()is a jQuery extension and not part of the CSS specification, queries using:lt()cannot take advantage of the performance boost provided by the native DOMquerySelectorAll()method. For better performance in modern browsers, use$("your-pure-css-selector").slice(0, index)instead.
Используйте селектор :lt()
var amount = 5,change = '';
$('.proj-img:lt('+amount+')').map(function(i,el){
$(el).attr('src', 'src/img/' + change + 'Slide' + (i + 1) + '.png');
});
console.info($('.proj-img'))<script src = "https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
<img src = "" alt = "" class = "proj-img">
var $projImg = $('.proj-img').slice(0, amount);