2012-03-30 15 views
8

en Python, que pueda hacer lo siguiente, utilizar condicionalmente una segunda lista si una primera uno está vacía:jquery: ¿hay una forma concisa de usar condicionalmente un segundo selector si un primer selector vuelve vacío?

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

en JavaScript, sin embargo,

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

Por lo tanto, si el "o truco "está fuera de la mesa, me pregunto cuál es la forma más concisa para hacer algo como lo siguiente si-javascript-eran-python-este-haría el trabajo pseudocódigo:

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

Puede comprobar la longitud de los resultados. ¿Pero cuál es tu respuesta si ambos vuelven con 0 resultados? – Sampson

+0

¡Hola, el operador ternario podría hacer el truco! var $ elem = (foo.length == 0)? []: [1,2]; ; o para leer más o consultar otros artículos sobre ternario si desea saber más. http://stackoverflow.com/questions/3168136/ternary-operator-in-javascript-with-multiple-expressions espero que ayude, ¡salud! –

+3

Operadores ternarios: ahorrando unos pocos bytes en caracteres mientras crean código de aspecto arcano desde 1950. –

Respuesta

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

no es lo suficientemente concisa?

¿Qué tal escribir una pequeña extensión jquery?

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

    return $(selector); 
} 

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

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

+1

Aún más corto:' $ .fn.or = function (x) {return this.length? esto: $ (x)} ':-P –

2

Usted puede basar su prueba fuera de la longitud:

// 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 []; 
}

a continuación, utilizar coalesceArray($('first-selector'), $('second-selector'))

Cuestiones relacionadas