2016-02-17 2 views
4

Есть ли способ сделать это четыре раза, чтобы сделать его короче? Я пытаюсь изменить класс от стояния до сидящего, а затем снова по одному за раз.Как сделать код JavaScript/jQuery короче

if(sitting > 0) { 
    $('.standing:first-of-type').removeClass('standing').addClass('sitting'); 
} else { 
    $('.sitting:first-of-type').removeClass('sitting').addClass('standing'); 
} 

if(sitting > 1) { 
    $('.standing:nth-of-type(2)').removeClass('standing').addClass('sitting'); 
} else { 
    $('.sitting:nth-of-type(2)').removeClass('sitting').addClass('standing'); 
} 

if(sitting > 2) { 
    $('.standing:nth-of-type(3)').removeClass('standing').addClass('sitting'); 
} else { 
    $('.sitting:nth-of-type(3)').removeClass('sitting').addClass('standing'); 
} 

if(sitting > 3) { 
    $('.standing:nth-of-type(4)').removeClass('standing').addClass('sitting'); 
} else { 
    $('.sitting:nth-of-type(4)').removeClass('sitting').addClass('standing'); 
} 
+0

уверен. Используйте счетчик и '$ ('. Stand: first-of-type'). Каждый (function (idx, elem) {})' –

+0

Производительность имеет смысл написать селектора DOM для переменных (по крайней мере, те, которые равны) –

+1

Если ваш код работает, и ваша единственная проблема заключается в том, что вы хотите сделать его более удобным для обслуживания, скорее всего, вы должны отправить этот вопрос в [Code Review] (http://codereview.stackexchange.com/). – ZeroOne

ответ

5

Вы можете использовать :lt и :gt селекторы.

:lt(index) выберите все элементы с индексом ниже index в соответствии с установленным набором. :gt(index) выберите все элементы с индексом, большим index, в соответствии с установленным набором. Из Jquery Docs

как класс sitting должен быть добавлен ко всем элементам, имеющим класс .standing которого index меньше, чем значение переменной sitting, :lt селектор может быть использован с переменной sitting, чтобы выбрать такие элементы. Затем addClass() и removeClass() могут использоваться в наборе элементов jQuery для добавления и удаления пройденных классов соответственно.

$('.standing:lt(' + sitting + ')').removeClass('standing').addClass('sitting'); 
$('.sitting:gt(' + sitting + ')').removeClass('sitting').addClass('standing'); 
+0

Мне нравится, что 2 лайнера, умный! –

+0

Из имеющегося кода, похоже, что это целое число. Я добавил сидение = сидение 3? 3: сидение <0? 0: Math.floor (сидя); 'в коде, но затем удален. [Также попросил OP добавить полный код.] (Http://stackoverflow.com/questions/35458534/how-to-make-this-javascript-shorter#comment58613809_35458534) – Tushar

1

Ну, вы можете сделать с уродливой для цикла:

function toggleSitting(sitting){ 
    var initial = 0; 
    var final = 3; 
    for(var i = initial; i <= final; i++){ 
     $('.standing:nth-of-type(' + (i+1) +')') 
      .toggleClass('standing', sitting < i) 
      .toggleClass('sitting', sitting > i); 
    } 
} 
toggleSitting(sitting); 
1

Это только проект, и это не проверялось, но есть логика в том, что вы пытаетесь сделать. Как только вы найдете логику, вы просто используете ее в цикле. Как что:

var condition; 
for(var i = 0; i < 4; i++){ 
    condition = sitting > i; 
    $('.standing:nth-of-type(' + (i + 1) + ')').toggleClass('standing', !condition).toggleClass('sitting', condtion); 
} 
1

Может быть что-то вроде этого:

var numberOfPlaces = 4; 

for(var i=0; i<sitting && i<numberOfPlaces ; i++){ 
    $('.standing:nth-of-type(' + (i+1) + ')').removeClass('standing').addClass('sitting'); 
} 

for(var i=sitting; i<numberOfPlaces ; i++){ 
    $('.sitting:nth-of-type(' + (i+1) + ')').removeClass('sitting').addClass('standing'); 
} 

или это:

var numberOfPlaces = 4; 

for(var i=0; i<numberOfPlaces; i++){ 
    if(i<sitting){ 
     $('.standing:nth-of-type(' + (i+1) + ')').removeClass('standing').addClass('sitting'); 
    }else if(i>=sitting){ 
     $('.sitting:nth-of-type(' + (i+1) + ')').removeClass('sitting').addClass('standing'); 
    } 
} 
+0

Спасибо, что сработало для меня! –

1

У вас есть HTML и CSS, чтобы сопровождать это?

Вы можете использовать переменную, чтобы указать «энный» типа:

$('.standing:nth-of-type(' + i + ')') 

хотя и не уверен, что это работает для случая, когда я = 1. Вы, возможно, потребуется первая в типа там.

Без CSS и HTML неясно, что именно вы хотите сделать.

Вы можете посмотреть на это также:

https://css-tricks.com/almanac/selectors/n/nth-of-type/

+0

Если вы не знаете о Fiddle, перейдите сюда: https://jsfiddle.net – sscotti

Смежные вопросы