如何在jQuery中存储全局值(不一定是全局变量)?

时间:2010-05-19 15:20:59

标签: javascript jquery global-variables

目前我正在开发一个使用大量JavaScript,jQuery,Microsoft客户端JavaScript和其他库的遗留网页。底线 - 我无法从头开始重写整个页面,因为业务无法证明这一点。所以......就是这样。无论如何,我需要使用变量污染(我真的尝试过)。我正在考虑三种选择 -

  1. 使用普通的JavaScript声明存储/检索它 - var x = 0;

  2. 使用jQuery在DOM标记中存储/检索值 - $("body").data("x", 0);

  3. 使用隐藏的表单字段,并使用jQuery设置/检索值 - $("whatever").data("x", 0);

  4. 有更好的方法吗?我查看了现有的一堆代码,我不相信该变量可以在函数中作用域。

6 个答案:

答案 0 :(得分:100)

您可以在jQuery对象中创建一个名称空间,如下所示:

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

或:

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

请记住,任何名为“mynamespace”的插件方法都将被覆盖,因此请务必使用合理的名称。

答案 1 :(得分:38)

对我来说,处理这种情况的最好方法是在window对象中定义一个对象:

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

这样可以保持您的范围整洁干净。每当您使用window.my_config访问全局时,任何查看代码的人都会知道正在访问全局。

答案 2 :(得分:6)

您可以在全局范围内创建哈希并将其用作命名空间:

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

答案 3 :(得分:2)

只是与你分享我的练习,我会在所需的JavaScript文件中创建一个带有合理前缀的全局对象/ var,就像我在这个对象将是一个文本框的页面上工作一样,我会命名它:

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

这些变量将在整个网站初始化后提供给您。

我希望这会有所帮助。

答案 4 :(得分:0)

短暂的通知:

fancybox是否正在执行AJAX(意思是:如果它在iFrame中加载,你应该在关闭方法中添加" parent"),如下所示:

parent.$.fancybox.close();

答案 5 :(得分:0)

使用下划线isEmpty()

_.isEmpty('')将返回true