當前位置:編程學習大全網 - 源碼下載 - js中提到的dom引用是什麽意思

js中提到的dom引用是什麽意思

這兩行代碼要區分的是DOM對象和jQuery對象的區別。

DOM對象和jQuery對象是兩種不同的對象,它們的實例也因此具有不同的屬性和方法。通常要操作頁面中的節點,我們都需要想辦法獲取對該節點的引用。比如如下代碼:

var?dom?=?document.getElementById('節點id');

這是通過節點的id來獲取壹個頁面節點,也就是對節點的引用。這個時候,我們對變量dom的任何操作,實際上就是對頁面節點的操作,比如說修改樣式、移除節點、獲取屬性等等。如下:

dom.style.display?=?'none';?//?隱藏節點

dom.parentNode.removeChild(dom);?//?刪除節點

var?height?=?dom.offsetHeight;?//?獲取節點高度

像上面的style、parentNode、removeChild、offsetHeight等等,都是DOM對象的屬性或方法。

因為DOM對象不屬於javascript的壹部分,它是各個瀏覽器對javascript的擴展,但各個瀏覽器又都在實現上有壹些不壹致,導致javascript代碼需要處理很多兼容性問題。為了解決這些兼容性問題,提高開發效率,jQuery庫就誕生了。

jQuery解決了兼容性問題,再加上它的實現極其巧妙,因此得到了很多人的吹捧。以前有壹點javascript基礎的人,要寫出稍微復雜些的特效,幾乎都不可能,但因為jQuery的出現,類似顯示隱藏、各種動畫效果,都只需要簡單的幾行代碼即可。有些人甚至覺得,jQuery甚至都能替代javascript,而且在各個前端學習的站點、博客中,也是將jQuery和javascript並列作為壹類。

但問題是,不了解基礎的javascript,在遇到問題、異常的時候,妳就只能幹瞪眼了。任何語言,框架和庫都無法取代最基礎的語法,而且框架和庫也都是由最簡單的語法豐富起來的。

jQuery實際上可以說是壹個大的類——javascript實現的類。以壹個簡單的模型來說,如下:

;(function(window,?undefined){

window.$?=?window.jQuery?=?jQuery;

//?定義jQuery類

function?jQuery(selector,?content){

content?=?content?||?document;

var?eles?=?content.querySelectorAll(selector);

var?len?=?eles.length;

//?給jQuery對象添加長度屬性

this.length?=?len;

//?方便獲取dom對象,獲取實例:jQuery('#id')[0];

for(var?i?=?0;?i?<?len;?i++){

this[i]?=?eles[i];

}

}

//?擴展原型

jQuery.prototype?=?{

//?構造函數

constructor?:?jQuery,

//?根據索引獲取dom對象

get?:?function(index){

return?this[index];

}

}

})(window);

這是壹段jQuery的模擬代碼,妳可以使用如下方式調用:

var?jqObj?=?new?jQuery('.class');

因為jQuery的特殊處理,寫jQuery代碼的時候不需要new即可用,但這裏沒有處理,所以需要加上new關鍵字。

上面返回的jqObj,就是我定義的jQuery的壹個對象,它是jQuery對象,已經不是DOM對象了。我可以寫如下代碼:

var?dom?=?jqObj.get(1);?//?獲取jQuery對象中下標為1的DOM對象

然後變量dom就和之前的變量dom壹樣,可以使用DOM對象的屬性和方法了。

但是,我們不能寫下面的代碼,否則它就會報異常:

jqObj.style.color?=?'red';

因為jQuery對象的實例,根本就沒有style這個屬性。jQuery也是壹樣的,jQuery對象和DOM對象是兩種不同的對象,它們的內部結構(比如上面的get方法是自定義的)也是不同的。當妳把jQuery對象當做DOM對象使用時,妳調用該對象的任何屬性和方法,都有可能觸發壹個屬性或方法未定義的異常,因為這個屬性或方法確實不存在。

所以,如果妳使用了jQuery庫,那妳就得在操作節點的時候,註意區分這個節點對象到底是DOM對象,還是jQuery對象。基本上jQuery的方法如果返回節點對象,返回值大多是jQuery對象,但也有例外,比如get等。

回到妳的題目,通過jQuery獲取的canvas對象,實際上是jQuery對象封裝後的對象。它沒有getContext方法,所以會報錯。但jQuery對象可以像訪問數組壹樣,通過中括號來獲取對應的DOM對象,所以第二種返回了最原始的Canvas對象,它是具有getContext方法的。

  • 上一篇:用C51單片機控制12個LED流水燈的C語言程序怎麽寫?
  • 下一篇:漲停後回踩,怎樣才能做好低吸?
  • copyright 2024編程學習大全網