Как сохранить глобальное значение (не обязательно глобальную переменную) в jQuery?

В настоящее время я работаю над устаревшей веб-страницей, в которой используется тонна JavaScript, jQuery, клиентский JavaScript для Microsoft и другие библиотеки. Суть - я не могу переписать всю страницу с нуля, поскольку бизнес не может ее оправдать. Итак... это то, что есть. Во всяком случае, мне нужно загрязнить (я действительно не пытался) глобальное пространство имен с переменной. Есть три варианта, о которых я думал -

  • Просто сохраните/извлеките его с помощью обычного объявления JavaScript - var x = 0;

  • Используйте jQuery для хранения/получения значения в теге DOM - $("body").data("x", 0);

  • Используйте поле скрытой формы и установите/извлеките значение с помощью jQuery - $("whatever").data("x", 0);

Есть ли лучший способ? Я посмотрел на существующую кучу кода, и я не верю, что переменная может быть ограничена функцией.

Ответ 1

Вы можете создать пространство имен внутри объекта jQuery, например:

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

или

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

Помните, что любой метод плагина с именем "mynamespace" будет перезаписан, поэтому обязательно используйте разумное имя.

Ответ 2

Для меня лучший способ справиться с этой ситуацией - определить объект в объекте window:

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

Это обеспечит вам чистоту и чистоту. И всякий раз, когда вы будете обращаться к глобальному использованию window.my_config, любой, кто смотрит на код, знает, что к нему обращаются глобальные.

Ответ 3

Вы можете создать хэш в глобальной области и использовать его как пространство имен:

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

Ответ 4

Просто поделившись с вами своей практикой, я сделаю глобальный объект /var в требуемом файле JavaScript с разумным префиксом, например, если я работаю на странице, где этот объект будет текстовым полем, то я бы назвал его

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

Если у вас более одной глобальной переменной, вы также можете иметь пространство имен, например:

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';

Эти переменные будут доступны вам на веб-сайте после их инициализации.

Надеюсь, это поможет.

Ответ 5

Просто короткое уведомление:

Делает ли fancybox AJAX (имеется в виду: если он загружается в iFrame, вы должны добавить "parent" в метод close), вот так:

parent.$.fancybox.close();

Ответ 6

Используйте подчеркивание isEmpty().

_.isEmpty('') вернет true.