最近工作中很多地方都使用到了Jquery,把一些踩过的坑写下来
1、jQuery全局变量的声明
全局变量的好处在于减少变量的个数,并可以在不同的函数中直接使用,在某些传值的时候很好用,但他的坏处在于占用内存较多,增加耦合性
全局变量有如下几种声明方式:
一、var + 变量名的方式在function外部声明,如果在函数内部用此方法声明的即为局部变量
<script>
var
test = 5;
//全局变量
function
a(){
var
a = 3;
//局部变量
alert(a);
}
function
b(){
alert(test);
}
//a();//调用a方法,那么方法里面的内容才会执行
//b();//同上
</script>
二、不用var,直接声明变量时,这个变量会被默认为全局变量,即使你是在函数内部声明此变量
<script>
test = 5;
//全局变量
function
a(){
aa = 3;
//也是全局变量
alert(test);
}
//a(); //输出5
//alert(aa);//这里也可以方法a()方法里面的变量,因为aa是全局变量
</script>
三、使用window全局对象声明
<script>
window.test = 50;
alert(test);
//输出50
</script>
2、jQuery字符串转化为数组、数组的遍历以及判断某个值是否在数组内
在利用ztree实现某个功能时,需要根据数据库取出的值来判断该值是否已经被勾选过。
数据是通过字符串类型存入数据库的,样式是这样的:“4063,4186,.......”
var push_merchants = "<?=$push_merchants;?>" . split ( ',' ) ; //通过split()方法将字符串转化为数组,但注意这是数组里面的数据类型并不是数字而是字符串,如下图
由于一开始并没有注意这个问题,所以在后面判断值是否在数组中时出现了很大的问题。
function filter(treeId, parentNode, childNodes){
if (!childNodes) return null;
var zTree = $.fn.zTree.getZTreeObj("ztree");
for (var i=0, l=childNodes.length; i<l; i++){
childNodes[i].name = childNodes[i].name.replace(/\.n/g, '.');
//console.log($.inArray(childNodes[i].id,checkedNode));
//如果数组中存在childNodes[i],则将状态变为选定
if($.inArray(childNodes[i].id,checkedNode) > 0){
//通过$.inArray()来判断数组中是否存在某个值,存在返回索引值,不存在返回-1
zTree.checkNode(childNodes[i], true, true);
}
}
return childNodes;
}
刚开始这段判断结果一直返回-1,后来经过检查发现:要判断的值为整型,而数组里的值全部为字符串,所造成了判断结果全部为错误,所以以后进行判断时一定要注意值的类型。
var checkedNode =
new Array()
;
for (
var i=
0
,
l=push_merchants.
length
;
i<l
;
i++){
checkedNode[i] =
parseInt
(push_merchants[i])
;
}
通过遍历数组,我将数组内的值全部转化为了整型.