Javascript-форум (https://javascript.ru/forum/)
-   jQuery (https://javascript.ru/forum/jquery/)
-   -   Объясните как работет этот код? (https://javascript.ru/forum/jquery/59100-obyasnite-kak-rabotet-ehtot-kod.html)

lexapiter25 27.10.2015 23:26

Объясните как работет этот код?
 
Объясните мне пожалуйста как работает следующий код
var next = ((current.next().length) ? ((current.next().hasClass('show')) ? $('div#rotator ul li:first') :current.next()) : $('div#rotator ul li:first')); а именно его часть в скобках
Что он делает я зная, но я не понимю как.. То есть что происходит тут (current.next().length) и вот тут ((current.next().hasClass('show')) и тд. И как почитать то что сначала идет условие, потом сразу еще условие...
Воде просмотрел курс "Специалиста" по jquery , вроде все понятно... написал кое что сам, а тут вообще не мгу понять логику...

lexapiter25 27.10.2015 23:46

Вот это не понимаю - "next().length" остальное вроде дошло, когда разобрался со скобками.

рони 27.10.2015 23:56

lexapiter25,
((current.next().length) ? если есть li следующий length = 1 от текущего работаем с ним иначе length = 0 переходим к первому li

рони 27.10.2015 23:58

lexapiter25,
http://javascript.ru/forum/misc/4829...razhenijj.html

lexapiter25 28.10.2015 01:03

Цитата:

Сообщение от Rise (Сообщение 393325)
lexapiter25, такая логика
if (current.next().length === 1) {
	if (current.next().hasClass('show') === true) {
		var next = $('div#rotator ul li:first');
	} else {
		var next = current.next();
	}
} else {
	var next = $('div#rotator ul li:first');
}

Понял спасибо..осталось вот с этим разобраться
next.css({opacity: 0.0})
.addClass('show')
.animate({opacity: 1.0}, 1000);

// Прячем текущую картинку
current.animate({opacity: 0.0}, 1000)
.removeClass('show');
То есть в какой момент он присваивает класс. Каждому следующему li пока не дойдет до первого? А когда дойдет, то удалит класс у него, что бы заново все началось? Так?
Или он удаляет класс show у li, которому он его только что присвоил, сразу после выполнения анимации?

lexapiter25 28.10.2015 01:05

Это вот кусок по куренту. var current = ($('div#rotator ul li.show')? $('div#rotator ul li.show') : $('div#rotator ul li:first'));

lexapiter25 28.10.2015 01:19

Цитата:

Сообщение от рони (Сообщение 393320)
lexapiter25,
((current.next().length) ? если есть li следующий length = 1 от текущего работаем с ним иначе length = 0 переходим к первому li

То есть в данном случае все li будут иметь lenght=1, пока не дойдут до последнего? А в конце получится, что li больше нет... иии что произойдет? будет возвращено false и переход к первому li? Так я понял?

рони 28.10.2015 01:23

Цитата:

Сообщение от lexapiter25
что произойдет

найдётся первый li -- получилась карусель
http://javascript.ru/forum/jquery/47...tml#post311109

lexapiter25 29.10.2015 01:16

Спасибо всем за ответы разобрался..

Lecseus 26.05.2016 10:37

Объяснил сам себе
 
Здравствуйте, я попытался сам себе объяснить, как работает кусок кода. Скажите, правильно ли я понимаю или что-то упускаю или что-то понимаю неверно?
function kontroll9(){
		var answer = document.getElementById("otvet9"), - переменная, которая будет хранить элемент в html коде, который отвечает за блок, выводящий ответ.

			vastus = document.getElementsByName("v9"), - создается переменная vastus, которая хранит в себе группу элементов (radio или checkbox) под определенным айди в html коде

			array = [1,1,1,0]; //массив булевских значений, верные ответы 1

			array = array.every(function(check, i){ // перебор элементов в массиве. переменной array присваивается значение массива, обработанного функцией every. every это функция, которая проверяет все ли элементы в массиве прошли тест, который задан функцией. Сама функция задает правило, при котором функция возвращает значение параметра check, в случае если функция every прошла успешно проверку по заданному критерию, то есть равна булевому значению true. 

				return check == vastus[i].checked - возвращает значение параметра check, в случае если функция every прошла успешно проверку по заданному критерию, то есть по значениям, которые находятся в массиве array

			})
			answer.innerHTML = array ? "верно" : "неверно"; - в элементе answer выводится значение, которое получается при проверке переменной array. знак ? означает, что если значение true, то выводится надпись "верно", а : означает, что иначе выводится "неверно".			
			answer.style.color = array ? "green" : "red";
			array && correct++; - увеличивает количество правильных ответов на 

1. 
	};

и ещё, я не пойму, зачем тут в конце не только correct++ но и array++???
спасибо заранее:help:

рони 26.05.2016 10:48

Цитата:

Сообщение от Lecseus
array++???

где это в коде?
array && correct++; тоже что if(array == true) correct++; если ответ правильный общее количество правильных ответов увеличить на 1.

Lecseus 26.05.2016 10:53

СпасибО!!!!
Точно, нет такого в коде, невнимателен. А так понимаю верно?

рони 26.05.2016 11:05

Цитата:

Сообщение от Lecseus
А так понимаю верно?

да ... массив в переменной array превращается Boolean-объект (true/false)

Lecseus 26.05.2016 11:10

большая благодарность!

Dilettante_Pro 26.05.2016 11:17

Lecseus,
Цитата:

Сообщение от Lecseus
vastus = document.getElementsByName("v9"), - создается переменная vastus, которая хранит в себе группу элементов (radio или checkbox) под определенным айди в html коде

Небольшая неточность.
Не айди, а нейм.
Кроме того, у группы элементов не может быть одинакового айди (написать можно, работать будет неправильно, вообще непредсказуемо)

Lecseus 26.05.2016 11:45

Цитата:

Сообщение от Dilettante_Pro (Сообщение 417647)
Lecseus,

Небольшая неточность.
Не айди, а нейм.
Кроме того, у группы элементов не может быть одинакового айди (написать можно, работать будет неправильно, вообще непредсказуемо)

точно. благодарю!

Lecseus 26.05.2016 12:01

Интересно получается, то есть массив становится булевым значением только в двух положениях [1,0,1,1] - true, а [0,1,0,0] - false и никак иначе.

рони 26.05.2016 12:22

Lecseus,
нет массив становится true только при одном правильном ответе из 16 возможных

рони 26.05.2016 12:34

Lecseus,

все четыре чекбокса должны быть правильно выбраны
<script>
  for (var i=0; i<16; i++)  {
  var a = ("000"+i.toString(2)).substr(-4),
  b = [1,0,1,1].every(function(el,k) {
  return el == a[k]
})
  document.write(a+" => "+b+"<br>")}
  </script>

Lecseus 26.05.2016 12:59

var a = ("000"+i.toString(2)).substr(-4)

даа. вы не могли бы объяснить эту строчку пожалуйста?

рони 26.05.2016 13:18

Lecseus,
i.toString(2) преобразовать число i в двоичную систему, на всякий случай слева дописать нули ("000"+i.toString(2)) и взять четыре знака с конца .
i = 3;
a= "11";//toString(2)
a= "00011";//("000"+i.toString(2))
a="0011" //("000"+i.toString(2)).substr(-4)
условно: 2 первых чека не нажаты, 3 и 4 чекбоксы нажаты checked.

Lecseus 26.05.2016 13:22

очень полезно. благодарю! скажите, как у вас так получается мыслить? мне иногда кажется, что я не понимаю чего-то главного и из-за этого даже маленькие куски кода уже создают хаос в моей голове.

рони 26.05.2016 13:31

Lecseus,
сам удивляюсь :)

Lecseus 26.05.2016 13:31

:)


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