在官方的API上是這樣描述end()方法的:“回到最近的一個"破壞性"操作之前。即,將匹配的元素列表變為前一次的狀態。”;
看樣子好像是找到最後一次操作的元素的上一元素,在如下的例子中:
html代碼:
代碼如下:
<div>測試內容1</div>
<div>測試內容2</div>
jQuery代碼:
代碼如下:
$('<p>新增內容</p>').appendTo('div').addClass('c1').end().addClass('c2');
得到的結果是:
代碼如下:
<div>測試內容1 <p class="c1 c2">新增內容</p></div>
<div>測試內容2 <p class="c1">新增內容</p></div>
這裡我就有一點不太明白了,怎麼只有第一個<p>標簽有兩個樣式,end()方法後返回的是什麼,在火狐裡添加了監控,得到如下結果:
1.$('<p>新增內容</p>').appendTo('div')返回的是:[p,p]對象數組,即新增後的兩個p標簽;
2.$('<p>新增內容</p>').appendTo('div').addClass('c1')返回的是:[p.c1,p.c1]對象數組,即添加了c1類樣式後的p對象數組;
3.$('<p>新增內容</p>').appendTo('div').addClass('c1').end()返回的是[p.c1],是第1個<div>中的<p>,在2操作中,最後“破壞”的是第2個<div>中的 <p>,所以他的前一次操作的對象是第1個<div>中的<p>,返回的就是它;
4.$('<p>新增內容</p>').appendTo('div').addClass('c1').end().addClass('c2')返回的仍然是第1個<div>中的<p>;
現在算是有點明白了,關鍵是要搞清楚最後一次操作的元素的上一元素是什麼。