Javascript-форум (https://javascript.ru/forum/)
-   Общие вопросы Javascript (https://javascript.ru/forum/misc/)
-   -   Если в контейнере нечетное количество блоков, добавить последнему class (https://javascript.ru/forum/misc/60118-esli-v-kontejjnere-nechetnoe-kolichestvo-blokov-dobavit-poslednemu-class.html)

subbziro 11.12.2015 19:10

Если в контейнере нечетное количество блоков, добавить последнему class
 
Есть родительский блок .main_ul (он является ul'ом), в нем находятся li. Нужно чтобы если количество li нечетное, то последнему добавлялся класс .mainlast_li.
Помогите пожалуйста новичку

Mess4me 11.12.2015 19:48

subbziro,
<!doctype html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>Document</title>
    <style>
        .mainlast_li {
            background-color: #1b6d85;
        }
        
        
    </style>
    <script src="//code.jquery.com/jquery-1.11.3.min.js"></script>
</head>
<body>

 <ul class="main_ul ">
     <li>1</li>
     <li>2</li>
     <li>3</li>
     <li>4</li>
     <li>5</li>


 </ul>
<script>

    if(!$('.main_ul li').length % 2 == 0){
        $('.main_ul li:last-child').addClass('mainlast_li');
    }


</script>

</body>
</html>

yazonnile 11.12.2015 19:56

Это можно сделать стилями :)

http://jsfiddle.net/rhq1ynsq/

laimas 11.12.2015 19:56

Цитата:

Сообщение от Mess4me
if(!$('.main_ul li').length % 2 == 0){

$('.main_ul li').length & 1 ....

Mess4me 11.12.2015 19:59

yazonnile,
стилями не знаю как ) надо смотреть )

Mess4me 11.12.2015 20:05

laimas,
а можешь пояснить ) $('.main_ul li').length & 1
допустим $('.main_ul li').length = 5;
тогда 5&1 или 4&1 , а что дальше? :)
Как тут с четными и нечётными?)

ruslan_mart 11.12.2015 20:16

$('.main_ul > li:nth-of-type(2n+1):last-child').addClass('mainlast_li');


Но лучше прям в CSS селектором прописать нужный стиль, тогда никакой класс добавлять не нужно будет.

laimas 11.12.2015 20:17

Цитата:

Сообщение от laimas
Как тут с четными и нечётными?

Проверить кратность числа числу N > 2, это еще можно деление по модулю использовать, а вот четные числа в младшем разряде содержат 0, а нечетные 1. Поэтому эффективнее и проще не делить по модулю 2, а проверять младший разряд числа, ибо эта операция выполняется гораздо проще.

Это как с делением/умножением, если условия позволяют, то выгоднее не делить число а сдвинуть его на N разрядов вправо, а при умножении влево.

Mess4me 11.12.2015 20:39

laimas,
спасибо ,за объяснение , но я всё равно не понял :-?
А ссылку можно получить? :)

laimas 11.12.2015 20:45

А чего тут не понятного:

0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101
....

Рассказывать, что будет при логической операции AND чисел и 1, или не надо?

Ссылку на что?

Mess4me 11.12.2015 20:50

laimas,
вообщем после
Цитата:

Сообщение от laimas
0 = 0000
1 = 0001
2 = 0010
3 = 0011
4 = 0100
5 = 0101

я понял что мне надо посмотреть , спасибо.

ruslan_mart 11.12.2015 20:54

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

Вот пару примеров, как делать не нужно:

~str.indexOf('str')
foo ^= 1


А ниже правильные аналоги:

str.indexOf('str') != -1 или indexOf('str') + 1
foo = !foo

laimas 11.12.2015 20:55

Ну да, все просто. А почему при проверки четности выгодно использовать AND, а нечетности XOR, предлагаю догадаться самому.

laimas 11.12.2015 20:56

Цитата:

Сообщение от Ruslan_xDD
В данном случае лучше использовать деление по модулю, так это более правильный подход, нежели использование побитовых операций не по назначению.

Это из каких побуждений такой постулат?

Mess4me 11.12.2015 21:18

Ruslan_xDD,
спасибо :thanks: :thanks: :thanks:

laimas 11.12.2015 21:31

Цитата:

Сообщение от Ruslan_xDD
побитовые операторы лучше использовать там, где они действительно нужны, например при работе с бинарными данными.

По вашему так число, это не бинарные данные, и делениями занимается на аккумулятор процессора, а JS делит сама как-то и исключительно, как строки что ли? Ну что за глупости, в компьютере все бинарное в итоге, а как трактовать то или иное мы указываем. Но если делить, то делить число на другое число, затем проверить остаток, его анализ, установка флага и выдача результата. И все это процессор. А логическая операция (пугать не надо побиностью, в представлении машины, это просто), загрузка числа в аккумулятор и в данном случае проверка только младшего разряда, установка флага и все.


Что то вы нагородили много пугающего.

ruslan_mart 11.12.2015 21:44

laimas, это дело стиля кода, не более.

В некоторых ситуациях это гораздо проще, не спорю. Но если писать по стилю, то использовать побитовые операторы не нужно в таких ситуациях. К тому же, это портит сам код в плане понимания. Где-то даже видел статью на харбе по этому поводу.

Я сам раньше использовал побитовые операторы в условиях и т.д., но со временем пришёл к выводу, что лучше так делать не стоит.

laimas 11.12.2015 22:24

Цитата:

Сообщение от Ruslan_xDD
Но если писать по стилю, то использовать побитовые операторы не нужно в таких ситуациях. К тому же, это портит сам код в плане понимания. Где-то даже видел статью на харбе по этому поводу.


Это вы уже о вкусах и красоте, а к компьютерным делам, это отношения не имеет. Нет чисел "не бинарных" на компьютере, как и нет на нем строк, десятичных чисел, шестнадцатеричных и прочего, все только бинарное. Мы определяем трактовать то или иное в том или ином виде, а любому языку придется все это перелопачивать в удобоваримое для компьютера, и чем больше лишнего, тем дольше ему ворочаться, а компьютеру париться.

Любой язык обладает набором логических операций, которые можно и нужно использовать. А что не понятно, ну так это как понимать суть написанного, кому то понятно "мама мыла раму", кому только "мама (человек в платье, женщина) мыла (водой с мылом) раму (оконную)". Все остальное надуманное донельзя. :)

yazonnile 11.12.2015 22:36

Цитата:

Сообщение от Mess4me (Сообщение 399648)
yazonnile,
стилями не знаю как ) надо смотреть )

Я же оставил ссылку
http://jsfiddle.net/rhq1ynsq/1/

Mess4me 12.12.2015 11:34

yazonnile,
аа ... не увидел . Пардон)

subbziro 12.12.2015 13:55

Mess4me,
Ruslan_xDD,
yazonnile,

Всем спасибо за ответы, попробовал разными вариантами, через css более аккуратно вышло... js почему-то не сработал, может я что не так сделал.
Еще раз спасибо!:thanks:


Часовой пояс GMT +3, время: 07:59.