jquery对象、js全局变量等tips
1、一个DOM对象和Jquery对象,即使是作为一个数组,其元素相同,但其属性是不一样的。DOM Object!=$('');
转换的办法
Jquery=>DOM :取jQuery对象数组的第一个
var $jQueryObj=$('#id1'); var domObj=$jQueryObj[0]; //或$jQueryObj.get(0)
DOM=>jQuery 这个比较简单,直接加上$符号就可以了
var domObj=document.getElementById('#id1'); var $jQueryObj=$(dom);
2、window.onload和$(document).ready() 的区别
1)window.onload会在页面加载完所有元素才执行,而$(document).ready()会在Dom就绪就加载。如果直接调用一个函数,那么会最早加载。
window.onload = function () { alert('window.onload'); //最晚,加载完全部元素,包括图片后才执行 }; $(function () { alert('document.ready'); //其次,加载完DOM元素,比如表格的框架后,开始执行 }); function myFunction() { alert("myFunction!"); //最早,加载完母板后就执行 } myFunction();
2)window.onload若多次注册事件,后面的会覆盖前面的,而$(document).ready(不会覆盖,而是依次注册。
3、javascript的全局变量
全局变量在子函数中有效,如果在子函数中使用var 来改变了值,该变量的值在函数外不改变,否则,如不用var,则其变量的作用域会解析到外面。
原因在于“作用域链”这个概念。所谓作用域链,就是指函数作用范围的链条。在子函数中使用var声明变量时,链条就停止了。同样,使用function(variable){}时,作用域链也停止。
例如:
var s1=1; var s2=1; var s3=1; function myFunction(){ var s1=2; s2=2; } function myFunction2(s3){ s3=2; } alert(s1); //此时结果为1,s1的作用域链碰见var 即停止 alert(s2); //此时结果为2 alert(s3); //此时结果为2,s3的作用域链碰见将自己作为参数的函数也停止
4、在用jQuery的.each函数遍历一个jQuey对象时,有一点需要注意,在回调函数中,this是一个DOM对象,而不是jQuery对象
$('input').each(function(){ alert(this.value); //注意:this是一个DOM对象,而不是jQuery对象 });
因此,this没有val()方法,而是有value属性。