[转载]jQuery对象VS DOM对象
2009/06/03 11:30

这文章只是很有可能帮助,没想到最后。。。还不是用这些方法解决的。有些绕圈子,但在绕的时候学到不少东西。主要是要 参测试出问题在哪。喜一个!耶~~~

jQuery对象和DOM对象

jQuery对象就是通过jQuery包装DOM对象后产生的对象。jQuery对象是jQuery独有的,其可以使用jQuery里的方法,但是 不能使用DOM的方法;
例如$("#img").attr("src","test.jpg"); 这里的$("#img")就是jQuery对象;

DOM对象就是Javascript固有的一些对象操作。DOM对象能使用Javascript固有的方法,但是不能使用jQuery里的方法。
例 如:document.getElementById("img").src="test.jpg";这里的 document.getElementById("img")就是DOM对象;

$("#img").attr("src","test.jpg"); 和document.getElementById("img").src="test.jpg";是等价的,是正确的,但 是$("#img").src="test.jpg";或者 document.getElementById("img").attr("src","test.jpg"); 都是错误的。

要解决这个问题就要将DOM对象转换成jQuery对象,例 如$(this).attr("src","test.jpg");

1.DOM对象转成jQuery对象:

对于已经是一个DOM对象,只需要用$()把DOM对象包装起来,就可以获得一个jQuery对象了。$(DOM对象)
如:var v=document.getElementById("v"); //DOM对象
var $v=$(v);    //jQuery对象
转换后,就可以任意使用jQuery的方法了。

2.jQuery对象转成DOM对象:

两种转换方式将一个jQuery对象转换成DOM对象:[index]和.get(index);
(1)jQuery对象是一个数据对象,可以通过[index]的方法,来得到相应的DOM对象。
如:var $v =$("#v") ; //jQuery对象
var v=$v[0];    //DOM对象
alert(v.checked)   //检测这个checkbox是否被选中

(2)jQuery本身提供,通过.get(index)方法,得到相应的DOM对象
如:var $v=$("#v"); //jQuery对象
var v=$v.get(0);   //DOM对象
alert(v.checked) //检测这个checkbox是否被选中

通过以上方法,可以任意的相互转换jQuery对象和DOM对象。需要再强调注意的是:DOM对象才能使用DOM中的方 法,jQuery对象是不可以用DOM中的方法。

JS 创建对象(常见几种)

贴个代码先:

  1. function O(user,pwd){       //use constructor
  2.     this.user=user;
  3.     this.pwd=pwd;
  4.     this.get=get;
  5.     return this;
  6. }
  7.   function O2(user,pwd){   //use factory  
  8.   var obj=new Object();
  9.      obj.user=user;
  10.      obj.pwd=pwd;
  11.      obj.get=get;
  12.     return obj;
  13. }
  14. function O3(){         //use    prototype
  15. }
  16. O3.prototype.user='abc';
  17. O3.prototype.pwd='dis';
  18. // O3.propotype.get='get';
  19. //O3.prototype.get(){
  20.     //alert(this.pwd);
  21. //}
  22. function O4(user,pwd){
  23.     this.user=user;
  24.     this.pwd=pwd;
  25.     return this;
  26. }
  27.      O4.prototype.get=function(){alert('123');}

  28. //function get(){
  29.     //alert("This User:"+this.user);
  30. // }
  31. function test2(){
  32.     //var a=new O2('Us','Pw');   use factory & constructor
  33.     //var a=new O3();    //use prototype
  34.     //a.get();
  35.     var a=new O4('*U4','P4');      //混合
  36.     //a.user='Not ABC';    //set new property
  37.     //alert(a.user);
  38.      a.get();
  39. }

常用的MS 就这几种,可能还有其它的.碰到再说吧....  

炸弹:

  1. function getFormData(_fid){
  2. var _aa = {};

  3. $("#"+_fid+" .test").each(function(){
  4. var _id = $(this).attr("id");
  5. var _value = $(this).val();
  6. eval("var _obj={"+_id+":'"+_value+"'};");
  7. jQuery.extend(true,_aa,_obj);
  8. });
  9. return _aa;
  10. }

jQuery.extend的用法

有網友提問,看不太懂jQuery.extend的 用法,本想在留言裡回覆,但寫著寫著,發現要說到淺顯白話,還真得花些篇幅,索性另起一篇,解釋得更詳細點。

以jQuery.extend(objA, objB)為例,你可以想像成objA與objB各有一些屬性(方法也會比照處理,在此只提屬性),extend()會將objB有而objA沒有的屬性 加到objA裡,如果objB裡的某個屬性,objA裡剛好也有同名的屬性,則會用objB的屬性值去覆寫objA原有的屬性。objA最後就是整合結 果,或者也可以由var objC = jQuery.extend(objA, objB)取得整合結果(objA == objC)。

例如以下的程式碼,大家可以丟到Mini jQuery Lab跑一下,馬上就可以驗證jQuery.extend的效果:

var objA = { speed:"slow" };
var objB = { speed:"fast", power:"hard" };
var objC = jQuery.extend( objA, objB );
document.write("<dt>objA");
for (var p in objA) { document.write("<dd>" + p + "->" + objA[p]); }
document.write("<dt>objC");
for (var p in objC) { document.write("<dd>" + p + "->" + objC[p]); }

所得結果objA與objC的內容相同,都有兩個屬性speed:"fast"(被覆寫), power:"hard"(新加的)。

jQuery.extend可以支援多個物件屬性/方法的整併,並不限於兩個。例如: jQuery.extend(objA, objB, objC),objB, objC多出的屬性都會加到objA裡,如果有objA已有同名屬性,則會用objC/objB裡的屬性值覆寫之,若objB, objC都用同名屬性,則會排在後方的objC為準(後令壓前令)。

jQuery.extend的最常見的用途是用來處理Plugin或函數的傳入參數,比如函數會用到的參數有10個,但大部分情況呼叫時只需要指定 其中一兩個,其餘的用預設值即可。於是我們可以在函數中宣告一個預設值物件objDefault,裡面已有10個屬性,呼叫函數時則傳入 objOption,裡面只放入一兩個要變更的屬性值,經過var objSetting = jQuery.extend(objDefault, objOption)之後,我們得到10個"有指定用指定值,沒指定用預設值"的屬性供後續使用。舉個例子:

function addDiv(options) {
var defaults = {
border: "solid 1px black",
backgroundColor: "#cccccc",
width: "200px", height: "50px",
margin: "10px"
};
var settings = $.extend(defaults, options);
$("<div></div>").css(settings).appendTo("body");
}
addDiv({ width: "400px" });
addDiv({ backgroundColor: "orange", height: "100px" });
posted on 2010-05-14 21:49  JerryZhao  阅读(261)  评论(0编辑  收藏  举报