Como armazenar um valor global (não necessariamente uma variável global) no jQuery?

Atualmente estou trabalhando em uma página da Web herdada que usa uma tonelada de JavaScript, jQuery, JavaScript cliente da Microsoft e outras bibliotecas. A linha de fundo – não consigo rewrite a página inteira do zero, pois a empresa não pode justificá-la. Então, é o que é. De qualquer forma, eu preciso poluir (eu realmente tentei também não) o namespace global com uma variável. Existem as três opções que eu estava pensando –

  1. Apenas armazene / recupere usando uma declaração normal de JavaScript – var x = 0;

  2. Use jQuery para armazenar / recuperar o valor em uma tag DOM – $("body").data("x", 0);

  3. Use um campo de formulário oculto e defina / recupere o valor com jQuery – $("whatever").data("x", 0);

Existe uma maneira melhor? Eu olhei para a pilha de código existente, e não acredito que a variável possa ser definida em uma function.

Você pode criar um namespace dentro do object jQuery, assim:

 $.mynamespace = { myVar : "something", myVar2 : "somethingElse" }; 

ou:

 $.mynamespace = {}; $.mynamespace.myVar = "something"; $.mynamespace.myVar2 = "somethingElse"; 

Lembre-se de que qualquer método de plug-in chamado ‘mynamespace’ será substituído, portanto, use um nome sensato.

Para mim, a melhor maneira de lidar com essa situação é definir um object no object da janela:

 window.my_config = { my_var1 : 1, my_var1 : 2, my_var1 : 3 }; 

Isso manteria seu escopo limpo e arrumado. E sempre que você window.my_config o global usando window.my_config qualquer um que window.my_config o código saberia que um global está sendo acessado.

Você pode criar um hash no escopo global e usá-lo como um namespace:

 MyNamepace={} MyNamespace.newvar = 'value' // MyNamespace.newvar => 'value' 

Apenas compartilhando minha prática com você, eu faria um object global / var no arquivo JavaScript necessário com um prefixo sensato, como em se eu estivesse trabalhando em uma página onde este object seria uma checkbox de texto, então eu o nomearia:

 g_TxtMyValue = 'value'; // g_ specifies it to be a global variable, it is one // of the many conventions used 

Se você tiver mais de uma variável global, também poderá ter um namespace como:

 my_txt = {}; // For a real site I would use a prefix relative to the project // name instead of "my". my_txt.testValueOne = 'Value one'; my_txt.testValueOne = 'Value two'; 

Essas variables ​​estarão disponíveis para você em todo o site, após elas terem sido inicializadas.

Eu espero que isso ajude.

Apenas um aviso curto: É o fancybox é AJAX (o que significa que ele carrega dentro de um iFrame, você deve adicionar “pai” ao método close, assim: js parent.$.fancybox.close();

Use sublinhado isEmpty() .

_.isEmpty('') retornará true .