課程
/前端開發
/jQuery
/jQuery基礎(二)—DOM篇
求助:為什么bt2不需要去重?單擊一次后,試過變量p中還有內容,但是再單擊也不會再把p元素添加到頁面?謝謝!
2016-09-01
源自:jQuery基礎(二)—DOM篇 4-4
正在回答
1.直接點擊右邊按鈕,出現下面添加成功的,是因為內存中還有剛才detach()的p對象,這兒的重置代碼沒刪除內存,所以會造成有這種情況,可以刷新右邊頁面,不用重置代碼。正常的直接點擊右邊按鈕,其實是執行$("body").append(undefined);,頁面中沒有添加任何元素
2.#bt1為什么去重,當有p節點的時候才執行刪除且保存到變量p中,沒有p節點的時候,不執行刪除且保存。如果不去重,即沒有p節點的時候,執行刪除且保存到變量p中,那右邊按鈕就是無效的了
3.#bt2為什么不去重,append在是調用原生的appendChild。如果調用appendChild()將已存在文檔中的一個節點再次插入,那個節點將自動從它當前的位置刪除并在新的位置重新插入:沒有必要顯式刪除該節點。
qq_感謝永遠有歌把心境道破_03171663
因為bt2不是刪除,即使多次點擊不會丟失數據,但如果是bt1沒有去重,連續點擊會連續響應,數據會丟失,即使后面點擊bt2也無法找回了。
其實,bt2也應該去重的;不然你先點擊bt2下面又會出現p元素;
??$("#bt2").click(function()?{ ????????if?($("p").length)?return;?//去重,(只有P元素不出現時才append) ????????//把p元素在添加到頁面中 ????????//事件還是存在 ????????$("body").append(p); ????});
有同樣的困惑,弄懂了一部分,還是沒完全懂。以下是我的一些理解:
加了一行代碼:
$("#bt2").click(function() {
? ? console.log(p);
? ? ? ? $("body").append( p);
? ? });
在瀏覽器中調試運行發現,再次單擊btn2時,console.log(p)是執行了的,而且運行到$("body").append( p);這一句時沒有報錯,而是順利地運行了,只是頁面沒有變化。
所以,此時內存中應該還是有p的,而且每次btn2的點擊事件都執行了,只是?語句$("body").append( p);沒有得出我們所想的結果,問題應該在這,但我也還沒找到原因,希望有大神能解答~
p元素存在的話就執行detach,沒有的話就不執行,btn2,只有執行過detach才能執行,不然內存中沒有p的模型對象,所以不需要去重。
Jurchen 提問者
舉報
jQuery第二階段開啟DOM修煉,了解創建、插入、刪除與替換
1 回答去重 是什么意思???
2 回答去重怎么理解
8 回答if (!$("p").length) return; 去重 有大神能解釋下去重是什么鬼?
5 回答為什么需要使用document.querySelector而不是使用$("body")呢?
2 回答請問代碼中的“去重”是什么意思?
Copyright ? 2025 imooc.com All Rights Reserved | 京ICP備12003892號-11 京公網安備11010802030151號
購課補貼聯系客服咨詢優惠詳情
慕課網APP您的移動學習伙伴
掃描二維碼關注慕課網微信公眾號
2016-10-27
1.直接點擊右邊按鈕,出現下面添加成功的,是因為內存中還有剛才detach()的p對象,這兒的重置代碼沒刪除內存,所以會造成有這種情況,可以刷新右邊頁面,不用重置代碼。
正常的直接點擊右邊按鈕,其實是執行$("body").append(undefined);,頁面中沒有添加任何元素
2.#bt1為什么去重,當有p節點的時候才執行刪除且保存到變量p中,沒有p節點的時候,不執行刪除且保存。
如果不去重,即沒有p節點的時候,執行刪除且保存到變量p中,那右邊按鈕就是無效的了
3.#bt2為什么不去重,append在是調用原生的appendChild。如果調用appendChild()將已存在文檔中的一個節點再次插入,那個節點將自動從它當前的位置刪除并在新的位置重新插入:沒有必要顯式刪除該節點。
2016-09-23
因為bt2不是刪除,即使多次點擊不會丟失數據,但如果是bt1沒有去重,連續點擊會連續響應,數據會丟失,即使后面點擊bt2也無法找回了。
2016-09-14
其實,bt2也應該去重的;不然你先點擊bt2下面又會出現p元素;
2016-09-11
有同樣的困惑,弄懂了一部分,還是沒完全懂。以下是我的一些理解:
加了一行代碼:
$("#bt2").click(function() {
? ? console.log(p);
? ? ? ? $("body").append( p);
? ? });
在瀏覽器中調試運行發現,再次單擊btn2時,console.log(p)是執行了的,而且運行到$("body").append( p);這一句時沒有報錯,而是順利地運行了,只是頁面沒有變化。
所以,此時內存中應該還是有p的,而且每次btn2的點擊事件都執行了,只是?語句$("body").append( p);沒有得出我們所想的結果,問題應該在這,但我也還沒找到原因,希望有大神能解答~
2016-09-01
p元素存在的話就執行detach,沒有的話就不執行,btn2,只有執行過detach才能執行,不然內存中沒有p的模型對象,所以不需要去重。