Как сохранить глобальное значение (не обязательно глобальную переменную) в jQuery?
В настоящее время я работаю над устаревшей веб-страницей, которая использует тонну JavaScript, jQuery, Microsoft client JavaScript и других библиотек. Суть в том, что я не могу переписать всю страницу с нуля, поскольку бизнес не может ее оправдать. Так... это то, что есть. Во всяком случае, мне нужно загрязнить (я действительно старался не слишком) глобальное пространство имен переменной. Есть три варианта, о которых я думал ... --4-->
просто сохраните/извлеките его с помощью обычного JavaScript объявление -
var x = 0;
используйте jQuery для хранения / извлечения значения в теге DOM -
$("body").data("x", 0);
используйте скрытое поле формы и установите / получите значение с помощью jQuery -
$("whatever").data("x", 0);
есть ли лучший способ? Я посмотрел на существующую кучу кода, и я не верю, что переменная может быть ограничена функцией.
6 ответов
Вы можете создать пространство имен внутри объекта jQuery, вот так:
$.mynamespace = {
myVar : "something",
myVar2 : "somethingElse"
};
или:
$.mynamespace = {};
$.mynamespace.myVar = "something";
$.mynamespace.myVar2 = "somethingElse";
имейте в виду, любой метод плагина с именем "mynamespace" будет перезаписан, поэтому обязательно используйте разумное имя.
для меня лучший способ справиться с этой ситуацией является определение объекта в окне:
window.my_config =
{
my_var1 : 1,
my_var1 : 2,
my_var1 : 3
};
это будет держать ваш объем аккуратным и чистым. И всякий раз, когда вы получите доступ к глобальному использованию window.my_config
любой, кто смотрит на код, будет знать,что доступ к глобальному.
вы можете создать хэш в глобальной области и использовать его как пространство имен:
MyNamepace={}
MyNamespace.newvar = 'value'
// MyNamespace.newvar => 'value'
просто делясь своей практикой с вами, я бы сделал глобальный объект / 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';
эти переменные будут доступны вам на всем веб-сайте после их инициализации.
Я надеюсь, что это помогает.
просто короткое уведомление:
Является ли fancybox AJAX (это означает, что он загружается в iFrame, вы должны добавить "родитель" в метод close, например:
js
parent.$.fancybox.close();