the_styles ? the_styles.appendTo('head'); the_styles=null : the_styles = $('.stylesheet').detach();

Очевидно, это не действительно. Обратите внимание на ";" между appendTo() и the_styles=null. Как мне написать это в 1 строке и при этом иметь несколько таких выражений?

11
Oscar Godson 2 Июл 2010 в 22:14

6 ответов

Лучший ответ

Используйте оператор запятой следующим образом:

the_styles ? (the_styles.appendTo('head'), the_styles=null) : the_styles =  $('.stylesheet').detach();

Вот что Mozilla Developer Center пишет об операторе запятой:

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

Подробнее читайте здесь: https://developer.mozilla.org/en/Core_JavaScript_1 .5_Reference / Операторы / Special_Operators / Comma_Operator

21
Andrea Zilio 10 Авг 2010 в 09:40

Кому нужен троичный оператор?

​the_styles = !the_styles && $('.stylesheet').detach()​​​​ ||
             the_styles.appendTo('head') && null;​

Пришлось переключать выражения, так как в противном случае значение null первого выражения всегда будет вызывать вычисление второго выражения .detach().

Единственное в умном коде то, что когда вы вернетесь к нему после перерыва на кофе, он не будет иметь никакого смысла даже для вас. Так что это намного лучше:

if(the_styles) {
    the_styles.appendTo('head')
    the_styles = null;
}
else {
    the_styles = the_styles.detach('.stylesheet');
}

Для меня даже приведенная выше упрощенная версия не имеет никакого смысла. Часть что очевидна, но почему это делает?

8
Anurag 2 Июл 2010 в 18:51

Я согласен с Llowcoder, но если вы все еще хотите это:

the_styles ? function(){ the_styles.appendTo('head'); the_styles=null;}() : the_styles = $('.stylesheet').detach();
1
Gregoire 2 Июл 2010 в 18:19
the_styles ? (function() {the_styles.appendTo('head'); the_styles=null})() : <etc>

Просто оберните блок кода в (function() { и })().

Теперь о трудной части: почему вы хотите это сделать? Возможно, есть лучшее решение!

2
mcherm 2 Июл 2010 в 18:18
the_styles ? the_styles.appendTo('head') : the_styles = $('.stylesheet').detach();

Вам не нужно обнулять его, если вы перезаписываете его!

0
RobertPitt 2 Июл 2010 в 18:19
the_styles=the_styles || $('.stylesheet').detach(); the_styles.appendTo('head');
0
gblazex 2 Июл 2010 в 18:19