国产探花免费观看_亚洲丰满少妇自慰呻吟_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ā)表
主站蜘蛛池模板: 齐齐哈尔市| 清镇市| 特克斯县| 渭源县| 宜良县| 资溪县| 沙雅县| 双桥区| 买车| 舟山市| 太仆寺旗| 德州市| 会昌县| 喜德县| 双鸭山市| 墨脱县| 许昌县| 丰原市| 建水县| 北宁市| 石狮市| 岳普湖县| 安化县| 沙河市| 奉化市| 九寨沟县| 天柱县| 板桥市| 尼木县| 鄱阳县| 凉城县| 集安市| 宁城县| 修文县| 积石山| 弥渡县| 黄大仙区| 罗山县| 梅河口市| 东至县| 祁阳县|