2016-06-07 26 views
5

Ho un certo numero di variabili JavaScript sulla mia pagina:Trova una variabile utilizzando jQuery

var opts_???? = ... 
var opts_???? = ... 
var opts_???? = ... 

Il ???? viene assegnato un numero casuale da parte del sistema di gestione dei contenuti, in modo da non so il nome completo del variabile.

Sto cercando quelli non definiti.

C'è un modo in jQuery per scorrere tutte le variabili che iniziano con opts_ in modo che possa testarli per essere indefiniti?

Le variabili sono globali, se questo aiuta.

Se non in jQuery, mi accontento di javascript regolare.

+0

Fa il nome della variabile corrispondono a un nome, una classe o attributo id di un elemento HTML nella pagina? –

+0

No, queste sono solo variabili – Graham

+0

cosa intendi per * undefined *? –

risposta

7

Ciò è possibile solo se tutte le variabili sono state dichiarate nell'ambito globale (e quindi disponibili anche come proprietà dell'oggetto globale window).

Poiché il vostro è, è possibile utilizzare Object.keys(window) per ottenere i nomi di tutte queste proprietà e quindi utilizzare $.each o Array.prototype.forEach per testare ciascuno di essi a turno.

var opts = Object.keys(window).filter(function(n) { 
    return n.substring(0, 5) === 'opts_'; 
}); 

var opts_undefined = opts.filter(function(n) { 
    return window[n] === undefined; 
}); 

[scritto come due inviti chiarezza sull'efficienza]

6

Se le variabili sono in ambito globale (cioè non creato all'interno di una funzione) dovrebbero anche essere disponibile come proprietà nell'oggetto window . In altre parole, è possibile accedere alla variabile opts_1234 come window.opts_1234 o window['opts_1234'].

Il modo più semplice per afferrare tutte le variabili sarebbero:

var variables = Object.keys(window).filter(function(prop) { 
    return prop.substring(0, 5) === 'opts_'; 
}); 

Ora variables contiene una serie di nomi, come ['opts_1', 'opts_666']

È inoltre possibile estendere tale filtro per includere solo le variabili che aren' t undefined:

var variables = Object.keys(window).filter(function(prop) { 
    return prop.substring(0, 5) === 'opts_' && window[prop] !== undefined; 
}); 
+0

'.indexOf' è (IMHO) la funzione sbagliata per questo lavoro. – Alnitak

+0

Ho considerato l'utilizzo di un'espressione regolare, ma non sono sicuro che farebbe una grande differenza. Che cosa suggerisci? –

+2

beh, nella mia risposta ho usato '.substring()', dato che voglio testare esplicitamente solo i primi cinque caratteri. Il problema con '.indexOf' è che esaminerà l'intera stringa inutilmente. – Alnitak

1

var opts_1 = 'test'; 
 
var opts_2 = 'test1'; 
 
var opts_3 = 'test2'; 
 
var opts_4 = undefined; 
 

 
var vars = Object.keys(window).filter(function(key){ 
 
    return (key.indexOf("opts_")!=-1 && window[key] == undefined) 
 
}); 
 
console.log(vars);

0

Usa:

var marker='opts_'; 
var results=$('selector').find(marker); 

Speranza Questo vi aiuterà a