老司机91精品网站在线观看-老司机67194免费观看-老司国产精品视频-老熟人老女人国产老太-中文字幕日本在线-中文字幕日本一区久久

從零開始學習jQuery (三) 管理jQuery包裝集

2013-4-10    藍藍設計的小編

轉載藍藍設計(   www.hk66688.com  )是一家專注而深入的設計機構 ,為期望卓越的國內外企業提供有效的   BS界面設計 、 cs界面設計 、  ipad界面設計   、  包裝設計 、  圖標定制 、  用戶體驗 、交互設計、   網站建設 平面設計服務

來源:http://www.cnblogs.com/zhangziqiu/archive/2009/05/04/jQuery-Learn-3.html

如果您想訂閱本博客內容,每天自動發到您的郵箱中,   請點這里

一.摘要

在使用jQuery選擇器獲取到jQuery包裝集后, 我們需要對其進行操作. 本章首先講解如何動態的創建元素, 接著學習如何管理jQuery包裝集, 比如添加,刪除,切片等.

 

二.前言

本系列的2,3篇上面列舉了太多的API相信大家看著眼暈. 不過這些基礎還必須要講, 基礎要扎實.其實對于這些列表大家可以跳過, 等以后用到時再回頭看或者查詢官方的API說明.

本章內容很少, 主要講解動態創建元素和操作jQuery包裝集的各個函數.

 

三.動態創建元素

1.錯誤的編程方法

我們經常使用javascript動態的創建元素, 有很多程序員通過直接更改某一個容器的HTML內容.比如:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="http://www.w3.org/1999/xhtml"> <head>     <title>動態創建對象</title> </head> <body> <div id="testDiv">測試圖層</div> <script type="text/javascript">     document.getElementById("testDiv").innerHTML = "<div style=\"border:solid 1px #FF0000\">動態創建的div</div>";</script> </body> </html>


上面的示例中我通過修改testDiv的內容,在頁面上動態的添加了一個div元素. 但是請牢記,這是錯誤的做法!

錯誤的原因:

(1) 在頁面加載時改變了頁面的結構. 在IE6中如果網絡變慢或者頁面內容太大就會出現"終止操作"的錯誤. 也就是說"永遠不要在頁面加載時改變頁面的Dom模型".

(2) 使用修改HTML內容添加元素,  不符合Dom標準. 在實際工作中也碰到過使用這種方法修改內容后, 某些瀏覽器中并不能立刻顯示添加的元素, 因為不同瀏覽器的顯示引擎是不同的. 但是如果我們使用Dom的CreateElement創建對象, 在所有的瀏覽器中幾乎都可以. 但是在jQuery中如果傳入的而是一個完整的HTML字符串, 內部也是使用innerHTML. 所以也不是完全否定innerHTML函數的使用.

所以從現在開始請摒棄這種舊知識, 使用下面介紹的正確方法編程.

2.創建新的元素

下面介紹兩種正確的創建元素的方式.

(1)使用HTML DOM創建元素

什么是 DOM?

通過 JavaScript,您可以重構整個 HTML 文檔。您可以添加、移除、改變或重排頁面上的項目。

要改變頁面的某個東西,JavaScript 就需要對 HTML 文檔中所有元素進行訪問的入口。這個入口,連同對 HTML 元素進行添加、移動、改變或移除的方法和屬性,都是通過文檔對象模型來獲得的(DOM)。

在 1998 年,W3C 發布了第一級的 DOM 規范。這個規范允許訪問和操作 HTML 頁面中的每一個單獨的元素。

所有的瀏覽器都執行了這個標準,因此,DOM 的兼容性問題也幾乎難覓蹤影了。

DOM 可被 JavaScript 用來讀取、改變 HTML、XHTML 以及 XML 文檔。

DOM 被分為不同的部分(核心、XML及HTML)和級別(DOM Level 1/2/3):
Core DOM
定義了一套標準的針對任何結構化文檔的對象
XML DOM
定義了一套標準的針對 XML 文檔的對象
HTML DOM
定義了一套標準的針對 HTML 文檔的對象。

關于使用HTML DOM創建元素本文不做詳細介紹, 下面舉一個簡單的例子:

    //使用Dom標準創建元素     var select = document.createElement("select");
    select.options[0] = new Option("加載項1", "value1");
    select.options[1] = new Option("加載項2", "value2");
    select.size = "2";
    var object = testDiv.appendChild(select);

通過使用 document.createElement 方法我們可以創建Dom元素, 然后通過appendChild方法為添加到指定對象上.

(2) 使用jQuery函數創建元素

在jQuery中創建對象更加簡單, 比如創建一個Div元素:

$("<div style=\"border:solid 1px #FF0000\">動態創建的div</div>")


我們主要使用jQuery核心類庫中的一個方法:

jQuery( html, ownerDocument ) 
Returns: jQuery

根據HTML原始字符串動態創建Dom元素.

其中html參數是一個HTML字符串,  在jQuery1.3.2中對此函數做了改進:

當HTML字符串是沒有屬性的元素是, 內部使用document.createElement創建元素, 比如:

//jQuery內部使用document.createElement創建元素: $("<div/>").css("border","solid 1px #FF0000").html("動態創建的div").appendTo(testDiv);


否則使用innerHTML方法創建元素:

//jQuery內部使用innerHTML創建元素: $("<div style=\"border:solid 1px #FF0000\">動態創建的div</div>").appendTo(testDiv);

3.將元素添加到對象上

我們可以使用上面兩種方式創建一個而元素, 但是上面已經提到一定不要在頁面加載時就改變頁面的DOM結構, 比如添加一個元素. 正確的做法是在頁面加載完畢后添加或刪除元素.

傳統上, 使用window.onload完成上述目的:

//DOM加載完畢后添加元素 //傳統方法 window.onload = function() { testDiv.innerHTML = "<div style=\"border:solid 1px #FF0000\">動態創建的div</div>"; }


雖然能夠在DOM完整加載后, 在添加新的元素, 但是不幸的是瀏覽器執行window.onload函數不僅僅是在構建完DOM樹之后, 也是在所有圖像和其他外部資源完整的加載并且在瀏覽器窗口顯示完畢之后. 所以如果某個圖片或者其他資源加載很長時間, 訪問者就會看到一個不完整的頁面, 甚至在圖片加載之前就執行了需要依賴動態添加的元素的腳本而導致腳本錯誤.

解決辦法就是等DOM被解析后, 在圖像和外部資源加載之前執行我們的函數.在jQuery中讓這一實現變得可行:

//jQuery 使用動態創建的$(document).ready(function)方法 $(document).ready(
        function() { testDiv.innerHTML = "<div style=\"border:solid 1px #FF0000\">使用動態創建的$(document).ready(function)方法</div>"; }
);


或者使用簡便語法:

//jQuery 使用$(function)方法 $(
        function() { testDiv.innerHTML += "<div style=\"border:solid 1px #FF0000\">使用$(function)方法</div>"; }
);


使用$()將我們的函數包裝起來即可. 而且可以在一個頁面綁定多個函數, 如果使用傳統的window.onload則只能調用一個函數.

所以請大家將修改DOM的函數使用此方法調用. 另外還要注意document.createElement和innerHTML的區別. 如果可以請盡量使用document.createElement和$("<div/>")的形式創建對象.

 

四.管理jQuery包裝集元素

既然學會了動態創建元素, 接下來就會想要把這些元素放入我們的jQuery包裝集中.

我們可以在jQuery包裝集上調用下面這些函數, 用來改變我們的原始jQuery包裝集, 并且大部分返回的都是過濾后的jQuery包裝集.

jQuery提供了一系列的函數用來管理包裝集:

1.過濾 Filtering

名稱 說明 舉例
eq( index ) 獲取第N個元素 獲取匹配的第二個元素: 
$("p").eq(1)
filter( expr )

篩選出與指定表達式匹配的元素集合。

保留帶有select類的元素: 
$("p").filter(".selected")
filter( fn )

篩選出與指定函數返回值匹配的元素集合

這個函數內部將對每個對象計算一次 (正如 '$.each'). 如果調用的函數返回false則這個元素被刪除,否則就會保留。

保留子元素中不含有ol的元素: 

$("div").filter(function(index) { 
  return $("ol", this).size() == 0; 
});

is( expr ) 

注意: 這個函數返回的不是jQuery包裝集而是Boolean值

用一個表達式來檢查當前選擇的元素集合,如果其中至少有一個元素符合這個給定的表達式就返回true。

如果沒有元素符合,或者表達式無效,都返回'false'. 'filter' 內部實際也是在調用這個函數,所以,filter()函數原有的規則在這里也適用。

由于input元素的父元素是一個表單元素,所以返回true: 
$("input[type='checkbox']").parent().is("form")
map( callback )

將一組元素轉換成其他數組(不論是否是元素數組)

你可以用這個函數來建立一個列表,不論是值、屬性還是CSS樣式,或者其他特別形式。這都可以用'$.map()'來方便的建立

把form中的每個input元素的值建立一個列表: 

$("p").append( $("input").map(function(){ 
  return $(this).val(); 
}).get().join(", ") );

not( expr ) 刪除與指定表達式匹配的元素 從p元素中刪除帶有 select 的ID的元素: 
$("p").not( $("#selected")[0] )

slice( start, end )

選取一個匹配的子集 選擇第一個p元素: 
$("p").slice(0, 1);

2.查找 Finding

名稱 說明 舉例
add( expr )

把與表達式匹配的元素添加到jQuery對象中。這個函數可以用于連接分別與兩個表達式匹配的元素結果集。

動態生成一個元素并添加至匹配的元素中: 
$("p").add("<span>Again</span>") 
children( [expr] )

取得一個包含匹配的元素集合中每一個元素的所有子元素的元素集合。

可以通過可選的表達式來過濾所匹配的子元素。注意:parents()將查找所有祖輩元素,而children()只考慮子元素而不考慮所有后代元素。

查找DIV中的每個子元素: 
$("div").children()
closest( [expr] ) 取得與表達式匹配的的父元素

為事件源最近的父類li對象更換樣式:

$(document).bind("click", function (e) { 
  $(e.target).closest("li").toggleClass("hilight");
});

contents( ) 查找匹配元素內部所有的子節點(包括文本節點)。如果元素是一個iframe,則查找文檔內容 查找所有文本節點并加粗: 
$("p").contents().not("[nodeType=1]").wrap("<b/>");
find( expr )

搜索所有與指定表達式匹配的元素。這個函數是找出正在處理的元素的后代元素的好方法。

所有搜索都依靠jQuery表達式來完成。這個表達式可以使用CSS1-3的選擇器語法來寫。

從所有的段落開始,進一步搜索下面的span元素。與$("p span")相同: 
$("p").find("span")
next( [expr] )

取得一個包含匹配的元素集合中每一個元素緊鄰的后面同輩元素的元素集合。

這個函數只返回后面那個緊鄰的同輩元素,而不是后面所有的同輩元素(可以使用nextAll)。可以用一個可選的表達式進行篩選。

找到每個段落的后面緊鄰的同輩元素: 
$("p").next()
nextAll( [expr] )

查找當前元素之后所有的同輩元素。

可以用表達式過濾

給第一個div之后的所有元素加個類: 
$("div:first").nextAll().addClass("after");
offsetParent( ) 返回第一個有定位的父類(比如(relative或absolute)). 
 
parent( [expr] )

取得一個包含著所有匹配元素的唯一父元素的元素集合。

你可以使用可選的表達式來篩選。

查找每個段落的父元素: 
$("p").parent()
parents( [expr] ) 取得一個包含著所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通過一個可選的表達式進行篩選。 找到每個span元素的所有祖先元素: 
$("span").parents()
prev( [expr] )

取得一個包含匹配的元素集合中每一個元素緊鄰的前一個同輩元素的元素集合。

可以用一個可選的表達式進行篩選。只有緊鄰的同輩元素會被匹配到,而不是前面所有的同輩元素。

找到每個段落緊鄰的前一個同輩元素: 
$("p").prev()
prevAll( [expr] )

查找當前元素之前所有的同輩元素

可以用表達式過濾。

給最后一個之前的所有div加上一個類: 
$("div:last").prevAll().addClass("before");
siblings( [expr] ) 取得一個包含匹配的元素集合中每一個元素的所有唯一同輩元素的元素集合。可以用可選的表達式進行篩選。 找到每個div的所有同輩元素: 
$("div").siblings()

3.串聯 Chaining

名稱 說明 舉例
andSelf( )

加入先前所選的加入當前元素中

對于篩選或查找后的元素,要加入先前所選元素時將會很有用。

選取所有div以及內部的p,并加上border類: 
$("div").find("p").andSelf().addClass("border");
end( ) 回到最近的一個"破壞性"操作之前。即,將匹配的元素列表變為前一次的狀態。 

如果之前沒有破壞性操作,則返回一個空集。所謂的"破壞性"就是指任何改變所匹配的jQuery元素的操作。這包括在 Traversing 中任何返回一個jQuery對象的函數--'add', 'andSelf', 'children', 'filter', 'find', 'map', 'next', 'nextAll', 'not', 'parent', 'parents', 'prev', 'prevAll', 'siblings' and 'slice'--再加上 Manipulation 中的 'clone'。
選取所有的p元素,查找并選取span子元素,然后再回過來選取p元素: 

$("p").find("span").end()

 

 

五.常用函數舉例

[待續]

 

六.總結

本篇文章內容較少, 主要講解如何動態創建元素以及管理jQuery包裝集, 接口文檔列舉了太多,  實例部分還沒來得及寫. 因為要睡覺明天還要上班, 所以請各位見諒, 等以后有空的時候補上!

 

出品公司:

藍藍設計(北京蘭亭妙微科技有限公司)是一家專注而深入的設計機構 ,為期望卓越的國內外企業提供有效的視覺設計、ui界面設計、網站建設、用戶體驗服務,涉及互聯網、IT軟件、電子、銀行、保健品等多個行業,并建立了良好的口碑,積累了豐富的經驗。 
全國統一服務熱線  400-608-6026  QQ:896757335

 

日歷

鏈接

個人資料

藍藍設計的小編 http://www.hk66688.com

存檔

久久亚洲精品AB无码播放| 精品国产AV一区二区三区| 亚洲老熟女XXXXHDWAA| 久久中文字幕无码中文字幕有码| CHINESE叫床VIDEOS| 熟妇高潮一区二区精| 护士扒下内裤让我爽一夜| 在线无码一区二区| 人人妻人人妻人人人人妻| 国产精品IGAO视频| 亚洲色成人网站WWW永久四虎| 牛和人交VIDE欧关ⅩXOO| 丁香五月天天综合亚洲| 亚洲А∨天堂男人色无码| 蜜臀AV在线无码国产| 东京无码熟妇人妻AV在线网址| 亚洲AV无码专区亚洲AV桃 | 国产SM主人调教女M视频| 亚洲AV无码成人精品区伊人小说| 久久亚洲精品综合国产仙踪林| 啊灬啊别停灬用力啊无码视频| 午夜三级A三级三点自慰| 久久自己只精产国品| 成熟丰满熟妇强av无码区| 亚洲成人AV网址| 欧美黑人粗大猛烈18P| 国产成人一区二区精品视频| 亚洲人成电影网站色WWW| 欧美性一区二区三区| 国产乱了真实在线观看| 真人视频直播APP免费观看| 少妇被粗大的猛烈进出69影院| 精品人妻VA出轨中文字幕 | 久久躁夜夜躁天天躁| 成人人妻小说AV| 亚洲AV永久无码精品成人| 欧美FREESEX呦交| 国产伦久视频免费观看视频| 真实的国产乱ⅩXXX66| 熟悉妇人妻av无码毛片| 久久精品国产亚洲AV嫖农村妇女| 按摩师用嘴亲我下面过程| 亚洲AV无码成人精品区| 欧美乱强伦XXXXXXXXXX| 国产一二三四区中| AV无码AV在线A∨天堂APP| 亚欧乱色熟女一区二区| 欧美成人WWW免费全部网站 | 国产AV激情无码久久| 一本大道香蕉久中文在线播放| 三级 丰满 人妻 少妇| 久久精品国产亚洲AV网站| 东北老女人高潮大叫对白 | 亚洲AV成人精品日韩一区| 欧美成人国产精品视频| 国产亚洲一区二区手机在线观看| 无码国产色欲XXXXX视频| 47147大但人文艺术| 岳两腿之间白嫩的小缝| Chinese老熟女老女人HD| 俺去俺来也在线WWW色官网| 成人片黄网站色大片免费| 高清人人天天夜夜曰狠狠狠狠| 啊灬啊灬高潮来了…视频APP | 色欲av伊人久久大香线蕉影院| 日韩精品真人荷官无码| 肉色超薄丝袜脚交一区二区| 亚洲产在线精品亚洲第一站一| 亚洲欧洲日产国码中文字幕| 中文字幕乱码人妻综合二区三区| 中文字幕在线无码一区二区三区 | 精品国产V无码大片在线看 | 大屁股熟女一区二区三区| 丰满人妻熟妇乱又伦精品软件 | 黑人上司粗大拔不出来电影| 久久精品国产亚洲AV麻豆图片| 内射爽无广熟女亚洲| 男女爽到高潮的免费网站| 日韩精品无码一区二区中文字幕 | 99精品人妻无码专区在线视频区| 吃奶呻吟打开双腿做受视频| 久久99国产精品久久99| 男人J桶进女人P无遮挡的图片| 日本人XXXX裸体XXXX| 为老公升职我主动奉献的句子说说| 无码中文字幕日韩专区视频| 午夜欧美精品久久久久久久| 亚洲AV永久无码精品三区在线4| 咬住下唇动漫在线播放完整版| 最新中文字幕AV无码专区| 国产精品污WWW一区二区三区 | 看黄A大片爽爽爽不打码| 久久国产一区二区三区| 脔到她哭H粗话H好爽五星视频| 少女たちよ在线观看动漫4集免费 少女たちよ在线观看动漫4 | 疯狂做受XXXⅩ高潮视频免费| 久久精品国产成人| 人妻激情偷乱视频一区二区三区| 婷婷综合缴情亚洲狠狠| 亚洲精品成人片在线播放| 又大又粗又爽的少妇免费视频| 99久久亚洲精品无码毛片 | 公天天吃我奶躁我的在线观看| 久久久久蜜桃精品成人片| 玩两个丰满老熟女| 伊伊人成亚洲综合人网7777| 成人亚洲一区二区三区在线| 久久久久久国产精品免费无码 | 中国CHINESE壮男GⅤ军警| 粉嫩粉嫩一区性色AV片| 两口子交换真实刺激高潮 | 无线乱码A区B区C区D| 亚洲人成人无码一区二区三区| 资源在线WWW天堂官网| BT天堂资源种子在线| 国产成人综合久久精品| 久久人妻无码一区二区| 午夜福利1000集无码| 42岁女子20天断崖式衰老| 大炕上的肉体交换| 黑人强伦姧人妻完整版| 免费观看的国产大片APP下载| 人妻人人做人妻人人添| 亚洲精品无码精品MV在线观看| 抖抈APP入口免费| 人妻多毛丰满熟妇av无码| 在线看片无码永久免费AV| 久久久久久AV无码免费网站| 午夜香吻视频在线看免费| ぱらだいす天堂中文网.WWW| 精品无人区麻豆乱码1区2| 日本精品VIDEOSSEX 黑| 一本大道无码日韩精品影视_| 刺激Chinese乱叫国产高潮| 极品JK撕破丝袜自慰喷水| 爸的比老公大两倍儿媳妇叫什么呢 | 日韩日韩日韩日韩 日韩 日韩 | 国产精品无码专区| 欧美性猛交XXXX乱大交| 一本岛V免费不卡一二三区| 饥渴少妇高清VIDEOS| 性猛交富婆Ⅹ×××乱大交| PETEDAVIDSON鸟多长| 久久久久国色ΑV免费观看| 色五月激情中文字幕| 19岁MACBOOKPRO日本| 国精产品一区二区三区| 热RE99久久精品国99热| 中国成熟IPHONE| 狠狠色丁香婷婷久久综合| 无码一区二区三区蜜桃| 锕锕锕锕锕~好深啊免费软件| 精品综合无码奶水一区二区| 亚洲色婷婷一区二区三区| 最新高清中文字幕免费MV| 狠狠88综合久久久久综合网| 欧美老肥妇多毛XXXXX| 亚洲一区二区三区乱码AⅤ蜜桃女| 国产午夜成人AV在线播放| 无码少妇一区二区三区视频 | 老熟妇一区二区三区啪啪| 国精产品一品二品国精破解| 欧美人与牲动交XXXⅩ| 亚洲精品亚洲人成在线| 东京热人妻中文无码AV| 久久香蕉国产线看观看怡红院妓院 | 亚洲自偷自拍另类小说| 亚洲国色天香卡2卡3卡4| 国产98色在线 | 免费| 五十路レンタのおばさん| 国产成人AⅤ片在线观看| 无码精品人妻一区二区| 啊灬用力灬啊灬啊灬啊灬| 人妻熟妇乱又伦精品HD| 99久久久国产精品免费牛牛| 久久午夜夜伦鲁鲁片免费无码影院 | 亚洲欧美另类在线视频| 国产一区二区三区导航| 玩弄美艳馊子高潮秀色可贪| 337P粉嫩日本欧洲亚洲大胆艺| 久久无码专区国产精品| 岳两片肥美的蚌肉| 人妻 色综合网站| CAOPOREN超碰| 日本WV一本一道久久香蕉| FREE性中国熟女HD交换| 日本粉色IPHONE| 岛国无码AV不卡一区二区| 欧美视频一区二区三区四区| 99久久免费精品高清特色大片 | 色惰日本视频网站WWW| jizjizjiz亚洲熟妇无码| 男人女人免费啪啪观看| 一区二区三区无码免费看| 一区二区三区鲁丝不卡麻豆| 中文中文字幕成人无码AⅤ| 99久久婷婷国产一区二区| 被夫の上司に犯中文字幕| 丰满熟妇XXXX性久久久| 国产精品国产三级国产专区50|