目前我正在开发一个使用大量JavaScript,jQuery,Microsoft客户端JavaScript和其他库的遗留网页。底线 - 我无法从头开始重写整个页面,因为业务无法证明这一点。所以......就是这样。无论如何,我需要使用变量污染(我真的尝试过)。我正在考虑三种选择 -
使用普通的JavaScript声明存储/检索它 - var x = 0;
使用jQuery在DOM标记中存储/检索值 - $("body").data("x", 0);
使用隐藏的表单字段,并使用jQuery设置/检索值 - $("whatever").data("x", 0);
有更好的方法吗?我查看了现有的一堆代码,我不相信该变量可以在函数中作用域。
答案 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
。