本節書摘來自異步社群《jquery cookbook中文版》一書中的第1章,第1.7節,作者:【美】jquery社群專家組著,更多章節内容可以通路雲栖社群“異步社群”公衆号檢視
1.7.1 問題
需要删除用于一組元素的破壞性jquery方法(例如,filter()或find()),以便将集合恢複到破壞性方法使用之前的狀态,就像破壞性方法從來沒有調用過一樣。
1.7.2 解決方案
jquery提供end()方法,可以用它傳回使用破壞性方法之前選擇的一組dom元素。為了了解end()方法,我們來看看下面的html。
代碼中的第一條alert()語句包含的jquery語句搜尋文檔中所有
元素,然後對選中的
元素應用filter()方法,僅選擇類為middle的元素。length屬性報告了集合中剩下元素的數量:
<code>alert(jquery('p').filter('.middle').length); //提示1</code>
下一條alert()語句使用了end()方法。這裡所做的操作和前一條語句相同,唯一例外的是撤消了filter()方法,傳回filter()方法使用前包裝器集包含的元素:
alert(jquery('p').filter('.middle').end().length); //提示3
最後一條alert()語句示範了如何兩次使用end()方法移除filter()和find()破壞性修改,使包裝器集傳回其原始構成的方法:
<code>alert(jquery('p').filter('.middle').find('span').end().end().length); //提示3</code>
1.7.3 讨論
如果使用end()方法之前沒有執行破壞性操作,将會傳回一個空集。破壞性操作指的是任何改變比對jquery元素集合的操作,也就是傳回jquery對象的任何周遊或者操縱方法,包括add()、andself()、children()、closes()、filter()、find()、map()、next()、
nextall()、not()、parent()、parents()、prev()、prevall()、siblings()、slice()、
clone()、appendto()、prependto()、insertbefore()、insertafter()和replaceall()。