2015-08-07 4 views
0

Скажем, у меня есть список Sass:Как удалить все остальные предметы из списка Sass?

$list: 1, red, banana, gold, [class*="test"], potato 

Как я могу удалить каждый 1-й, 3-й, 5-й пункт и т.д.? Или, альтернативно, каждый 2-й, 4-й, 6-й и т. Д.? Возможно ли это?

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

Мой псевдокод:

@each $item in $list { 
    @if $item == nth($list, 2n) { 
     $list: remove($list, $item); 
    } 
} 

В качестве не программиста, я не уверен, как логические выше sinppet это - при условии, конечно remove() является действительной функцией, и «2n» представляет любой даже пункт.

ответ

1

nth() функция может использовать только specific number в отличие от nth-child в CSS.

Один из способов обойти это - вручную запросить текущую итерацию и добавить вещи, которые не соответствуют текущему номеру, в новый список.

$list: 1, red, banana, gold, potato; 
$newList: ; 
$i: 0; 
@each $item in $list { 
    $i: $i + 1; 
    @if $i == 2 { 
     $i: 0; 
    }@else{ 
     $newList: append($newList, $item); 
    } 
} 

@each $item in $newList { 
    /* #{$item} */ 
} 

Live Demo

+0

Удивительно. Все еще пытаюсь обвести вокруг себя голову, но она действительно работает. Для любого потенциального чтения новичков, чтобы заставить это выводить только EVEN-номера, измените '$ i: 0;' на '$ i: 1' –

+0

Рад, что это может помочь. Процесс работает, создавая счетчик '$ i' и каждый раз увеличивая его на единицу. Каждый раз, когда он набирает определенный номер (в этом примере: 2), он сбрасывает счетчик, но если число не выполняется, оно будет добавляться в список. Это немного грубая альтернатива, но SASS имеет тенденцию быть довольно ограниченным в этой области на данный момент. – BurpmanJunior

1

Немного поздно к этой партии, но есть альтернатива толкая вещи в новый список, которые могут вас заинтересовать.

Ваш псевдокод теоретически был на правильном пути. По сути, просто проверка нечетных/четных значений и действия соответственно достигается с помощью модульных математических вычислений - в языках программирования с использованием символа%.

Таким образом, используя очень ванильный пример

$list: 'a','b','c','d','e'; 
 
$i: 0; 
 

 
@each $item in $list { 
 
    $i: $i+1; 
 
    @if $i % 2 == 0 
 
    { 
 
\t @debug "it's an even index: " + $item;  
 
     \t $list: remove($list, $item); 
 
    } 
 
}

+0

Большое спасибо за публикацию, это действительно здорово знать, и я думаю, что это, вероятно, ближе к тому, что я изначально имел в виду, несмотря на то, что ответ BurpmanJunior работает отлично. Благодаря! –

+0

Конечно, если вы хотите, чтобы убить нечетные пронумерованные элементы индекса, то просто измените '$ я% 2 == 0 ' к ' $ я% 1 == 0' – petehotchkiss

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