Hello!

Tell a newbie how to select several items from the list by their index and assign them a class?

We have the following code:

$(document).ready(function() { //ОбъявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ var listitems = jQuery(".list li"); //Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ списка ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° //ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов списка ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° var total = listitems.length; //ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ΅ число ΠΎΡ‚ 1 Π΄ΠΎ ΠΊΠΎΠ»-Π²Π° элСмСнтов списка function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }; var willSelect = getRandomInt(1, total); //Π Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ΅ число //ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ массив с Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΌ количСством элСмСнтов списка var randArray = []; // массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ числа var i = 0; // индСкс для массива var countNum = willSelect; // количСство Π½ΡƒΠΆΠ½Ρ‹Ρ… чисСл var max = total; // максимальноС число var min = 1; // минимальноС число // Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ массив с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами while (i < countNum) { var rand = Math.floor(Math.random() * (max - min + 1)) + min; // Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ случайноС число if (find(randArray, rand) == 0) { // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ числа randArray[i] = rand; // Ссли ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ заисываСм Π΅Π³ΠΎ Π² массив i++; } }; // провСряСм Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² массив function randCheck(array, value) { for (var i = 0; i < array.length; i++) { if (array[i] == value) return 1; } return 0; }; //ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ массив, с Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΌΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами. var willSelect = randArray; $("list li") / ΠΊΠΎΠ΄ / .addClass("black"); }); 
 .wrap { display: block; width: 100%; height: 500px; background-color: lightgrey; } .list { display: block; width: 50%; height: 500px; background-color: darkgrey; margin: 0; } .list li { display: block; width: 100px; height: 50px; background-color: gray; text-align: center; } .black { background-color: black; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrap"> <ul class="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div 

In the final array, we received the "sequence numbers" of li elements, to which we need to add the class .black. So, how to add it to several elements at once? each?

Tell me please.

  • And to what specifically need to add a class? with some particular number? What determines the need for an element to add a class? - Alexey Shimansky
  • The class must be added to a random number of random list items. - Fargard

1 answer 1

In general, the answer is yes. It is necessary to run through the array:

 $(".list li").each(function(index, element) { if (willSelect.indexOf(index + 1) != -1) { $(this).addClass('black'); } }); 

Full code:

 $(document).ready(function() { //ОбъявляСм ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ var listitems = jQuery(".list li"); //Π­Π»Π΅ΠΌΠ΅Π½Ρ‚Ρ‹ списка ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° //ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ ΠΊΠΎΠ»-Π²ΠΎ элСмСнтов списка ΠΏΡ€Π°Π²ΠΎΠ³ΠΎ Π±Π»ΠΎΠΊΠ° var total = listitems.length; //ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ Ρ€Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ΅ число ΠΎΡ‚ 1 Π΄ΠΎ ΠΊΠΎΠ»-Π²Π° элСмСнтов списка function getRandomInt(min, max) { return Math.floor(Math.random() * (max - min + 1)) + min; }; var willSelect = getRandomInt(1, total); //Π Π°Π½Π΄ΠΎΠΌΠ½ΠΎΠ΅ число //ΠŸΠΎΠ»ΡƒΡ‡Π°Π΅ΠΌ массив с Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΌ количСством элСмСнтов списка var randArray = []; // массив, Π² ΠΊΠΎΡ‚ΠΎΡ€ΠΎΠΌ Π±ΡƒΠ΄Π΅ΠΌ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹Π΅ числа var i = 0; // индСкс для массива var countNum = willSelect; // количСство Π½ΡƒΠΆΠ½Ρ‹Ρ… чисСл var max = total; // максимальноС число var min = 1; // минимальноС число // Ρ†ΠΈΠΊΠ», ΠΏΠΎΠΊΠ° Π½Π΅ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠΌ массив с ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами while (i < countNum) { var rand = Math.floor(Math.random() * (max - min + 1)) + min; // Π³Π΅Π½Π΅Ρ€ΠΈΡ€ΡƒΠ΅ΠΌ случайноС число if (find(randArray, rand) == 0) { // ΠŸΡ€ΠΎΠ²Π΅Ρ€ΡΠ΅ΠΌ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ числа randArray[i] = rand; // Ссли ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½ΠΎΠ΅, Ρ‚ΠΎ заисываСм Π΅Π³ΠΎ Π² массив i++; } }; // провСряСм Π²Ρ…ΠΎΠΆΠ΄Π΅Π½ΠΈΠ΅ Π² массив function randCheck(array, value) { for (var i = 0; i < array.length; i++) { if (array[i] == value) return 1; } return 0; }; //ΠœΡ‹ ΠΏΠΎΠ»ΡƒΡ‡ΠΈΠ»ΠΈ массив, с Ρ€Π°Π½Π΄ΠΎΠΌΠ½Ρ‹ΠΌΠΈ Ρ†Π΅Π»Ρ‹ΠΌΠΈ ΡƒΠ½ΠΈΠΊΠ°Π»ΡŒΠ½Ρ‹ΠΌΠΈ числами. var willSelect = randArray; $(".list li").each(function(index, element) { if (willSelect.indexOf(index + 1) != -1) { $(this).addClass('black'); } }); }); 
 .wrap { display: block; width: 100%; height: 500px; background-color: lightgrey; } .list { display: block; width: 50%; height: 500px; background-color: darkgrey; margin: 0; } .list li { display: block; width: 100px; height: 50px; background-color: gray; text-align: center; } .list li.black { background-color: black; } 
 <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div class="wrap"> <ul class="list"> <li>1</li> <li>2</li> <li>3</li> <li>4</li> <li>5</li> <li>6</li> <li>7</li> <li>8</li> <li>9</li> <li>10</li> </ul> </div> 

Changed the .black style to .list li.black in css - otherwise it will not work due to the overlapping style .list li


Recommendation: when generating numbers, make another check that such a number has already been generated. Since you can generate an array with duplicates, like:

1, 4, 7, 2, 9, 2

Of course, when applying style - it will not affect in any way. But in any case it is wrong. Yes, and there may be problems in somewhere else, if for example the selection of five elements was expected, and two were highlighted. And so on...

  • Thank you very much! Everything is working. Check already added. - Fargard