http://www.jb51.net/article/17911.htm
jquery对象的相应方法DOM对象不能使用,而DOM对象的相应方法jquery也不能使用。所以在具体项目中要注意Jquery对象与DOM对象的转换问题刚开始学习jQuery,可能一时会分不清楚哪些是jQuery对象,哪些是DOM对象。至于DOM对象不多解释,我们接触的太多了,下面重点介绍一下jQuery,以及两者相互间的转换
什么是jQuery对象?
---就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法。
比如:
$("#test").html() 意思是指:获取ID为test的元素内的html代码。其中html()是jQuery里的方法
这段代码等同于用DOM实现代码:
虽然jQuery对象是包装DOM对象后产生的,但是jQuery无法使用DOM对象的任何方法,同理DOM对象也不能使用jQuery里的方法.乱使用会报错。比如:$("#test").innerHTML、document.getElementById("id").html()之类的写法都是错误的。
还有一个要注意的是:用#id作为选择符取得的是jQuery对象与document.getElementById("id")得到的DOM对象,这两者并不等价。请参看如下说的两者间的转换。
既然jQuery有区别但也有联系,那么jQuery对象与DOM对象也可以相互转换。
在两者转换前首先我们给一个约定:如果一个获取的是 jQuery对象,那么我们在变量前面加上$,如:var $variab = jQuery对象;如果获取的是DOM对象,则与习惯普通一样:var variab = DOM对象;这么约定只是便于讲解与区别,实际使用中并不规定。
jQuery对象转成DOM对象:
两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index);
(1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。
如:
var v=$v[0]; //DOM对象
alert(v.checked) //检测这个checkbox是否被选中
(2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象
var v=$v.get(0); //DOM对象
alert(v.checked) //检测这个checkbox是否被选中
DOM对象转成jQuery对象:
对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。$(DOM对象)
如:var v=document.getElementById("v"); //DOM对象
var $v=$(v); //jQuery对象
转换后,就可以任意使用jQuery的方法了。
通过以上方法,可以任意的相互转换jQuery对象和DOM对象。需要再强调注意的是:DOM对象才能使用DOM中的方法,jQuery对象是不可以用DOM中的方法。
转换案例:
获取JQUERY对象的方法
var jqueryObject = $("#test"); //jqeuryObject为一个Jquery对象,它可以使用jquery的所有方法但是不能使用
var jqueryObject = $("#test"); //jqeuryObject为一个Jquery对象,它可以使用jquery的所有方法但是不能使用
DOM对象的方法
var DOMObject = document.getElementById("test");//DOMObject为一个DOM对象,它可以使用DOM的所有方法,但是不能使用jquery的方法
var DOMObject = document.getElementById("test");//DOMObject为一个DOM对象,它可以使用DOM的所有方法,但是不能使用jquery的方法
jquery对象->DOM对象
var jqueryObject = $("#test");//获取jquery对象
var DOMObject = jqueryObject[0];//jquery对象转换为DOM对象
var jqueryObject = $("#test");//获取jquery对象
var DOMObject = jqueryObject[0];//jquery对象转换为DOM对象
DOM对象->jquery对象
var DOMObject = document.getElementById("test");//获取DOM对象
var jqueryObject = $(DOMObject);//DOM对象转换为jquery对象
使用jquery时,有时需要使用原始DOM对象的方法,例如调用Activex控件的某些方法时,此时就需要将jquery对象转换为DOM对象,转换方法如下:
方法1: $("xxx")[index]
方法2:$("xxx").get(index)
方法3:$("xxx").eq(index)[0]
http://www.ccvita.com/192.html
最近在闲暇时间用jQuery搞了一个多文件上传的东东,顺便写点笔记。
一直以来对于通过jQuery方式获取的对象使不能直接使用JavaScript的一些方法的,开始的时候不理解,现在此案知道,原来jQuery获得的对象并不和我们平时使用getElementById获得的对象是一样的对象。所以一些新手就很迷惑,为什么${"#Element"}不能直接innerHTML,这就是原因所在,解决方式请看下文。
jQuery对象与dom对象的转换
只有jquery对象才能使用jquery定义的方法。注意dom对象和jquery对象是有区别的,调用方法时要注意操作的是dom对象还是jquery对象。
普通的dom对象一般可以通过$()转换成jquery对象。
如:
$(document.getElementById("msg")) |
则为jquery对象,可以使用jquery的方法。
由于jquery对象本身是一个集合。所以如果jquery对象要转换为dom对象则必须取出其中的某一项,一般可通过索引取出。
如:
$("#msg")[0],$("div").eq(1)[0],$("div").get()[1],$("td")[5] |
这些都是dom对象,可以使用dom中的方法,但不能再使用Jquery的方法。
以下几种写法都是正确的:
$("#msg").html(); |
$("#msg")[0].innerHTML; |
$("#msg").eq(0)[0].innerHTML; |
$("#msg").get(0).innerHTML; |
jquery对象的初始化是写在匿名函数里的
就像这样:
第一个括号是声明了一个函数,第二个括号是执行这个函数
也就是说,jquery框架在页面载入的时候已经做了一些事情(这个个匿名函数已经被执行了)
做的这些事情使我们可以通过$("#yourId")或$(".yourClass")等方式获取页面元素
并把获取到的元素包装成jquery对象
匿名函数是怎么实现这些功能的呢?
首先框架定义了两个核心对象
一个是jQuery
一个是$
这两个对象都指向一个函数
这个函数是我们使用$()或jQuery()方法时的入口
这个方法返回一个jQuery.fn.init( selector, context );的实例
其实这个实例是一个jquery对象
jquery对象是一个什么样的对象呢?
jquery对象其实是一个javascript的数组
这个数组对象包含125个方法和4个属性
4个属性分别是
jquery 当前的jquery框架版本号
length 指示该数组对象的元素个数
context 一般情况下都是指向HtmlDocument对象
selector 传递进来的选择器内容 如:#yourId或.yourClass等
如果你通过$("#yourId")方法获取jquery对象,
并且你的页面中只有一个id为yourId的元素
那么$("#yourId")[0]就是HtmlElement元素
与document.getElementById("yourId")获取的元素是一样的
jquery对象是怎么构造出来的呢?
这个对象就是刚才我们提到的
框架不只为此对象定义了一个方法,还定义了它的原型(prototype)
原型的定义是通过json对象定义的
如
前面提到的125个方法4个属性有一部分在这个json对象中完成定义的
这个json对象中第一个方法就是init方法
也就是入口方法中的jQuery.fn.init( selector, context );
此方法与一个正则表达式对象配合来构造jquery对象
这个正则表达式为:
下面我们说一下init方法的实现逻辑
此方法有两个参数
一个是selector(选择器)
一个是context(上下文)
selector就是我们用$("#yourId")或jQuery(".yourClass")传递进来的变量
这个参数不一定是字符串,也可能是其他形式的变量
等会儿我们就会介绍到
context参数我们在使用jquery的时候很少用到,暂且不表
注意这两个参数都在返回的jquery对象中体现出来了(以两个同名的属性展示)
下面看一下这个方法体内部的实现逻辑
//如果没有选择器或者选择器为空的话,就把document对象赋值给他
//如果selector参数是dom元素,直接返回jquery对象
//也就是说你可以$(document.getElementById("allen"))把你的元素封装成jquery对象
//typeof 取对象的类型,用三个等号效率较高, 不需要类型转换,两个等号默认有类型转换
//这里用到了我们前面提到的正则表达式quickExpr
//match其实是一个数组
//第0个元素是与正则表达式相匹配的文本
//第1个元素是与正则表达式的第1个子表达式相匹配的文本(如果有的话)
//第2个元素是第2个子表达式相匹配的文本(如果有的话)
//第3个元素是第3个子表达式相匹配的文本(如果有的话)这里就是元素的ID,不包含#
//正则表达式匹配到了内容 并且 match[1]不为空 或者 context为空
//match[1]不为空的时候selector是HTML字符串,也就是你可以用$("
")把对象包装成jquery对象
//context为空的时候selector是页面元素ID
//选择器为html字符串 此情况暂且不表
//选择器为ID
//得到元素
//如果得到了这个元素但是元素的ID属性不是match[3],跳入分支。分支里面的东西做了什么工作,暂且不表
//把得到的页面元素封装成jquery对象
//如果elem为空,就传入一个空数组,框架怎么处理此空数组,暂且不表
//如果不为空就跳入我们前面说的if ( selector.nodeType )分支,构造出jquery对象来
//设置jquery对象的context属性
//设置jquery对象的selector属性
//返回这个对象给调用者
至此
var obj = $(“#yourId”);
构造jquery对象的初步工作就做完了