国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 擴(kuò)展 > jQuery > 正文

jQuery之end()和pushStack()使用介紹

2024-09-06 20:04:42
字體:
供稿:網(wǎng)友
但在我們自己寫jQuery代碼的時候,卻很少關(guān)注或使用過pushStack(). 如果我們需要寫個涉及DOM遍歷的插件,它就會顯得尤其有用.

在jQuery內(nèi)部,pushStack()方法通過改變一個jQuery對象的prevObject屬性來"跟蹤"鏈?zhǔn)秸{(diào)用中前一個方法返回的DOM結(jié)果集(被jQuery封裝過,也是個jQuery對象,說是"跟蹤",是因?yàn)閷?shí)際存儲的是個引用). 當(dāng)我們再鏈?zhǔn)秸{(diào)用end()方法后, 內(nèi)部就返回當(dāng)前jQuery對象的prevObject. 具體更多細(xì)節(jié), 直接看源碼即可. 這里只做個簡單的分析, 直接來個例子:

html:
復(fù)制代碼 代碼如下:
<div >
I am grandparent.
<div >
I am parent.
<div >
I am child.
</div>
</div>
</div>

javascript:
復(fù)制代碼 代碼如下:
var els = $('#child').parent().parent();
console.dir(els);

圖解:

了解這個之后, 我們來做一個grandparent插件,用來替代.parent().parent()這樣連續(xù)2次的調(diào)用,直接用.grandparent().如果"一不小心"沒考慮end()的話,代碼很可能就是這個樣子的:

復(fù)制代碼 代碼如下:
$.fn.grandparent = function() {
return this.parent().parent();
};

依舊用上面那個例子:

復(fù)制代碼 代碼如下:$('#child').grandparent().end(); //jQuery-[div#parent]

很顯然, 大多數(shù)情況下這不是我們想要的, 事實(shí)上我們想通過鏈?zhǔn)秸{(diào)用end()直接返回到j(luò)query[div#child]. 現(xiàn)在該是pushStack出馬的時候了,我們只要加上一行即可:

復(fù)制代碼 代碼如下:
$.fn.grandparent = function() {
var els = this.parent().parent();
return this.pushStack(els.get());
};

在pushStack內(nèi)部, 把els.get()返回的DOM數(shù)組封裝成一個新的jQuery對象, 而this(jQuery[div#child])會賦值給之前新構(gòu)建jQuery的prevObject, 最后返回新生的那個jQuery對象.

所以這次, 當(dāng)我們再用end()就對了:
復(fù)制代碼 代碼如下:
var grandparent = $('#child').grandparent()./* jquery-[div#grandparent]*/.end() /*jquery-[div#child]*/

此博文內(nèi)容的主體思想來自Learning JQuery中的一篇博客, 感謝該作者的分享. 感興趣的話, 點(diǎn)擊jQuery pushStack.

發(fā)表評論 共有條評論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
主站蜘蛛池模板: 凤冈县| 全州县| 安西县| 佛山市| 得荣县| 江山市| 长寿区| 永城市| 寿光市| 尉氏县| 虎林市| 静宁县| 苍梧县| 安化县| 二连浩特市| 潢川县| 宣汉县| 石狮市| 保山市| 巴林右旗| 巴东县| 弥渡县| 年辖:市辖区| 玉龙| 石柱| 和龙市| 北票市| 南丰县| 天长市| 江北区| 汉沽区| 京山县| 平顺县| 独山县| 霍州市| 含山县| 沈丘县| 农安县| 南涧| 荣昌县| 崇阳县|