十年網站開發(fā)經驗 + 多家企業(yè)客戶 + 靠譜的建站團隊
量身定制 + 運營維護+專業(yè)推廣+無憂售后,網站問題一站解決
Dom原生對象和jQuery對象的區(qū)別:
在南潯等地區(qū),都構建了全面的區(qū)域性戰(zhàn)略布局,加強發(fā)展的系統(tǒng)性、市場前瞻性、產品創(chuàng)新能力,以專注、極致的服務理念,為客戶提供成都做網站、網站設計 網站設計制作按需求定制開發(fā),公司網站建設,企業(yè)網站建設,成都品牌網站建設,全網整合營銷推廣,外貿營銷網站建設,南潯網站建設費用合理。
1.jquery選擇器得到的jquery對象和標準的 javascript中的document.getElementById()取得的dom對象是 兩種不同的對象類型,兩者不等價 ;
注:js原生獲取的dom是一個對象,jQuery對象就是一個數(shù)組對象,其實就是選擇出來元素的數(shù)組集合。所以說他們兩者是不同的對象類型不等價。
2.jQuery無法使用DOM對象的任何方法,同理DOM對象也不能使用jQuery里的方法. 亂使用會報錯。
例如(文章下面有兩個踩坑經歷。):
$("#id").html();
document.getElementById("id").innerHTML;
意思是指:獲取ID為id的元素內的html代碼。這兩段代碼 結果相同,但中間的取值過程不同 。
即:$("#id").innerHTML、document.getElementById("id").html()之類的寫法都是錯誤的。
注:jQuery是從js衍生出來的,師出同源,但是jQuery是 經過一系列操作 之后,將其封裝成了一個個不同的方法,學習jQuery開始就應當樹立正確的觀念,分清jQuery對象和DOM對象之間的區(qū)別,之后學習 jQuery就會輕松很多的。
深刻了解jQuery對象和普通DOM對象的區(qū)別?;ハ噢D化見Q1
Q1,js的寫法:document.getElementById('save').disabled=true;
在jquery中我是這樣寫的$("#save").disabled = true; 為什么沒效果呢
A,這個是典型的問題,其實因為$("#save")出來的其實是jQuery對象,而不是普通DOM對象
這是新手常見的問題。
解決方法有2:
1,用JQ寫法,$("#save").attr("disabled","true");
2,轉成DOM寫法$("#save")[0].disabled=true;
當然,$("#save")[0]也可以寫成$("#save").get(0)。他返回的也是DOM元素
$("#save").eq(0)得到的還是jq對象
$(dom對象)就能得到一個jq對象。
Q2,獲取選中的checkbox
A:
獲取所有選中的checkbox:
$("input:checkbox:checked")
判斷是否一組checkbox都選中了:
if($("input:checkbox:checked").length){}
判斷某一個checkbox是否被選中
if($("input:checkbox").is(":checked")){}
Q3,我的id里有[]或.之類的符號,怎么辦?或者帶有命名空間的xml標簽帶有:怎么辦?
A:用\\來轉義如div id="id[1]"/div
$("#id\\[1\\]")
本文實例分析了DOM對象和jQuery對象的轉換與區(qū)別。分享給大家供大家參考。具體分析如下:
jQuery Hello World程序:
script type="text/javascript" src="xxx//jquery-x.y.z.js"
引入jQuery.存在兩個版本,jquery-x.y.z.min.js是精簡壓縮版,不帶min的是開發(fā)版,代碼中的注釋和縮進等都被保留了.
注意路徑中的"/"需要轉義,即用"http://".
$()符號將DOM對象轉化為jQuery對象.
Hello World程序如下:
復制代碼 代碼如下:
html
head
titleHello jQuery/title
script type="text/javascript" src="libs//jquery-1.11.2.js"/script
script type="text/javascript"
$(document).ready(function () {
alert("Hello World");
});
/script
/head
body
/body
/html
$(document).ready和window.onload的比較
首先看window.onload:
復制代碼 代碼如下:
window.onload = sayHello;
window.onload = sayWorld;
function sayHello() {
alert("Hello");
}
function sayWorld() {
alert("World");
}
后面的方法會覆蓋掉前面的方法,也即彈泡最后只顯示一個,即World的那個.
如果采用$(document).ready,則方法會串聯(lián)起來,即先顯示Hello的alert,再顯示World的.
復制代碼 代碼如下:
$(document).ready(sayHello);
$(document).ready(sayWorld);
function sayHello() {
alert("Hello");
}
function sayWorld() {
alert("World");
}
這樣就可以關聯(lián)多個方法.
另一個很小的差別,就是ready方法的執(zhí)行會稍微靠前一點.widow.onload會等待DOM準備好,并且所有綁定結束,而ready只能DOM準備好,其他工作可能還沒有做好.
實例:給每一個超鏈接對象附加onclick事件
首先,body中添加多個超鏈接對象:
復制代碼 代碼如下:
body
a href="#"test1/abr
a href="#"test2/abr
a href="#"test3/abr
a href="#"test4/a
/body
要給每個對象添加onclick事件,可以有多種方法:
首先,可以在每個a標簽里面寫onclick屬性;
其次,可以利用window.onload添加一個方法,獲取所有的標簽,統(tǒng)一添加事件,如下:
復制代碼 代碼如下:
window.onload = function () {
var myLinks = document.getElementsByTagName("a");
for(var i = 0; i myLinks.length; ++i){
myLinks[i].onclick = function(){
alert("Hello link: " + i);
}
}
}
注意,這里我犯了一個錯誤,我本來以為alert的數(shù)目會遞增,結果實際運行的結果是每一個alert都是4.
這是因為js沒有塊級作用域,變量i引用的是for里的那個,循環(huán)后變成了4.也即,onclick事件發(fā)生的時候才去取i的值,當然都是4了.
下面用jQuery實現(xiàn)這一功能:
復制代碼 代碼如下:
$(document).ready(function () {
$("a").click(function () {
alert("Hello link from jQuery!");
});
});
jQuery中的$()符號會獲得頁面當中的所有合適的元素.
所以上面的代碼隱含了遍歷的過程,給每一個元素都加上了事件處理函數(shù).
click方法是jQuery對象提供的方法.
onclick是DOM對象的屬性.
DOM里面的很多屬性到jQuery里面就變成了方法.
DOM對象和jQuery對象之間的相互轉換與區(qū)別
看一個例子,首先加一個p標簽:
復制代碼 代碼如下:
p id="clickMe"Click Me!/p
先獲得一個DOM對象,然后將其轉換為一個jQuery對象:
復制代碼 代碼如下:
//Part 1: DOM -- jQuery
//DOM object:
var pElement = document.getElementsByTagName("p")[0];
alert("DOM pElement: " + pElement.innerHTML);
//Convert DOM object to jQuery object:
var pElementjQuery = $(pElement);
alert("jQuery pElementjQuery: " + pElementjQuery.html());
也可以先獲得一個jQuery對象,再將其轉換為DOM對象:
復制代碼 代碼如下:
//Part 2: jQuery -- DOM
//jQuery object array:
var clickMejQuery = $("#clickMe");
//Convert jQuery object to DOM object (2 ways):
//way 1:
var domClickMe1 = clickMejQuery[0];
alert("dom1: " + domClickMe1.innerHTML);
//way 2:
var domClickMe2 = clickMejQuery.get(0);
alert("dom2: " + domClickMe2.innerHTML);
再次注意:jQuery中$()獲取的是一個滿足條件的所有元素的數(shù)組.
小總結:
$("字符串")會返回滿足條件的所有元素的一個數(shù)組,其中:
字符串以#開頭,表示id;
字符串以.開頭,表示CSS的class名;
若非以上兩種情況,則改字符串表示標簽名.
$(DOM對象)可以得到一個jQuery對象.
jQuery對象和DOM對象使用說明,需要的朋友可以參考下。
1.jQuery對象和DOM對象
第一次學習jQuery,經常分辨不清哪些是jQuery對象,哪些是 DOM對象,因此需要重點了解jQuery對象和DOM對象以及它們之間的關系.
DOM對象,即是我們用傳統(tǒng)的方法(javascript)獲得的對象,jQuery對象即是用jQuery類庫的選擇器獲得的對象;
復制代碼 代碼如下:
var domObj = document.getElementById("id"); //DOM對象
var $obj = $("#id"); //jQuery對象;
jQuery對象就是通過jQuery包裝DOM對象后產生的對象,它是jQuery獨有的。如果一個對象是jQuery對象,那么就可以使用jQuery里的方法,例:
$("#foo").html(); //獲取id為foo的元素內的html代碼,html()是jQuery特有的方法;
上面的那段代碼等同于:
document.getElementById("foo").innerHTML;
注意:在jQuery對象中無法使用DOM對象的任何方法。
例如$("#id").innerHTML 和$("#id").checked之類的寫法都是錯誤的,可以用$("#id").html()和$("#id").attr ("checked")之類的 jQuery方法來代替。同樣,DOM對象也不能使用jQuery方法。學習jQuery開始就應當樹立正確的觀念,分清jQuery對象和DOM對象之間的區(qū)別,之后學習 jQuery就會輕松很多的。
2.jQuery對象和DOM對象的互相轉換
在上面第一點說了,jquery對象和dom對象是不一樣的!比如jquery對象不能使用dom的方法,dom對象不能使用jquery方法,那假如我 jquery沒有封裝我要的方法,那能怎么辦呢?
這時我們可以將jquer對象轉換成dom對象
jquery對象轉換成 dom對象
jquery提供了兩種方法將一個jquery對象轉換成一個dom對象,即[index]和get(index)??赡苡腥藭X得奇怪,怎么是用下標呢,沒錯,jquery對象就是一個數(shù)組對象.
下面代碼將演示一個jquery對象轉換成dom對象,再使用dom對象的方法
復制代碼 代碼如下:
var $cr=$("#cr"); //jquery對象
var cr = $cr[0]; //dom對象 也可寫成 var cr=$cr.get(0);
alert(cr.checked); //檢測這個checkbox是否給選中
dom對象轉換成jquery對象
對于一個dom對象,只需要用$()把dom對象包裝起來,就可以獲得一個jquery對象了,方法為$(dom對象);
復制代碼 代碼如下:
var cr=document.getElementById("cr"); //dom對象
var $cr = $(cr); //轉換成jquery對象
轉換后可以任意使用jquery中的方法了.
通過以上的方法,可以任意的相互轉換jquery對象和dom對象.
最后再次強調,dom對象才能使用dom中的方法,jquery對象不可以使用dom中的方法,但 jquery對象提供了一套更加完善的工具用于操作dom,關于jquery的dom操作將在后面的文章進行詳細講解.
ps: 平時用到的jquery對象都是通過$()函數(shù)制造出來的,$()函數(shù)就是一個jquery對象的制造工廠.
建議:如果獲取的對象是 jquery對象,那么在變量前面加上$,這樣方便容易識別出哪些是jquery對象,例如:
var $variable = jquery對象;
如果獲取的是dom對象,則定義如下:
var variable = dom對象
一、選取DOM元素
jQuery的核心是通過各種選擇器,選中DOM元素,可以用querySelectorAll方法模擬這個功能。
var $ = document.querySelectorAll.bind(document);
這里需要注意的是,querySelectorAll方法返回的是NodeList對象,它很像數(shù)組(有數(shù)字索引和length屬性),但不是數(shù)組,不能使用pop、push等數(shù)組特有方法。
二、DOM操作
DOM本身就具有很豐富的操作方法,可以取代jQuery提供的操作方法。
尾部追加DOM元素。
// jQuery寫法
$(parent).append($(child));
// DOM寫法
parent.appendChild(child)
頭部插入DOM元素。
// jQuery寫法
$(parent).prepend($(child));
// DOM寫法
parent.insertBefore(child, parent.childNodes[0])
刪除DOM元素。
// jQuery寫法
$(child).remove()
// DOM寫法
child.parentNode.removeChild(child)
當然不同,jq選擇器選擇的結果是經過封裝的dom對象(可以叫做jquery對象),添加了jq自身的一些專有的屬性和方法,比如 $('.xxx').index(),而原生的dom對象卻不能這樣用。
通過簡單的方法就能在原生dom對象與jquery對象之間轉換:
假如a是dom對象,那么$(a)就是轉換后的jquery對象;
假如a是jquery對象,那么a[0]就是轉換后的dom對象