2012-03-30 11 views
8

in Python, posso effettuare le seguenti operazioni, usare condizionalmente un 2 ° lista se un 1 ° uno è vuoto:jquery: esiste un modo conciso per utilizzare in modo condizionale un secondo selettore se un primo selettore torna vuoto?

>>> x = [ ] or [1, 2] 
>>> x 
[1, 2] 

in JavaScript, invece,

>>> x = [ ] || [1, 2]; 
[ ] 

Quindi, se il "o trucco "è fuori dal tavolo, mi chiedo che cosa è il modo più conciso per fare qualcosa di simile a quanto segue se-javascript-erano-python-questo-sarebbe-lavoro pseudocodice:

$elems = $('first-selector') || $('second-selector') 
+0

È possibile controllare la lunghezza dei risultati. Qual è la tua risposta se entrambi ritornano con 0 risultati? – Sampson

+0

hiya, l'operatore ternario potrebbe fare il trucco! var $ elem = (foo.length == 0)? []: [1,2]; ; o per più leggere o controllare altri articoli in giro per ternario se vuoi saperne di più. http://stackoverflow.com/questions/3168136/ternary-operator-in-javascript-with-multiple-expressions spero che aiuti, evviva! –

+3

Operatori ternari: salvataggio di alcuni byte nei caratteri durante la creazione di codice dall'aspetto arcano dal 1950. –

risposta

9
var elems = $("first-selector"); 
if(!elems.length) { 
    elems = $("second-selector"); 
} 

non è abbastanza conciso?

Che ne dici di scrivere una piccola estensione jquery?

$.fn.or = function(selector) { 
    if (this.length) { 
     return this; 
    } 

    return $(selector); 
} 

var elems = $("first-selector").or("second-selector") 
+2

+1 per '$ .fn.or' :-) –

+1

Ancora più corto:' $ .fn.or = function (x) {return this.length? questo: $ (x)} ':-P –

2

È possibile basare la test di fuori della lunghezza:

// Cache your results 
var first = $(".first"); 
var second = $(".second"); 

// Assign your results 
$elems = !first.length ? second : first; 
1
function coalesceArray(){ 
    for (var i=0; i<arguments.length; i++) { 
    if (arguments[i] && arguments[i].length) return arguments[i]; 
    } 
    return []; 
}

quindi utilizzare coalesceArray($('first-selector'), $('second-selector'))

Problemi correlati