作者luckynu (黑得發亮)
看板Ajax
標題[js]使用clone()複製DOM的疑問
時間Mon Feb 20 20:07:25 2017
先附上程式碼
http://codepen.io/luckynu/pen/RKzyRL/?editors=1010
原本是要用clone()將DOM的資料一直堆疊下去
但是出現了一個問題,
只能複製一次,第二次後都不會執行複製的命令,
如果把複製出來的刪除,就可以在一次複製,但還是不會超過2各
還請幫忙解答
感謝
--
^^ 生 木其 ㊣
● ▽ ⊙
女口 女口 ╭
┼╯
╰─┼─╯ 木其 ╱↘ 生
↙╰─╯
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.23.204
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Ajax/M.1487592449.A.837.html
1F:→ Kenqr: 複製的刪除後 再按複製一樣沒反應喔 02/20 21:34
2F:→ Kenqr: 因為clone那行只執行了一次 第一次按是把複製品放到最後 02/20 21:35
3F:→ Kenqr: 第二次按就是把複製品拿出來又放回去了 02/20 21:35
4F:推 TETZ: first的結果是整個sel的element你是要複製第一個selectName 02/21 07:54
5F:→ TETZ: 嗎?我用$("div.sel").children().eq(0).clone()然後把這個 02/21 07:55
6F:→ TETZ: 這個宣告放到click event裡就可以了 02/21 07:55
我的想法是不要每次執行的時候再執行一次$("div.sel").first().clone();這個動作
所以才想要將這個資料存於全域資料理面
→
luckynu: 感謝兩個大大回答,大概可以知道運作的結果,原理需要再 02/21 12:23
7F:→ luckynu: 研究一下。 02/21 12:23
8F:→ luckynu: 原本的想法是用clone()複製出來的Dom資料存儲成全域資料 02/21 12:29
9F:→ luckynu: ,後續貼上的時候就不用再執行一次複製的動作,並且可以 02/21 12:29
10F:→ luckynu: 維持資料的初始值。 02/21 12:29
※ 編輯: luckynu (218.164.23.204), 02/21/2017 13:53:24
11F:推 TETZ: 應該是clone這個動作是跟createElement是一樣把記憶體地址 02/22 03:49
12F:→ TETZ: 存在你assign的變數了所以要create新的元件的話就是要再 02/22 03:50
13F:→ TETZ: clone一次$("div.sel").last().after(clonedataaaa.clone()) 02/22 03:50
14F:→ TETZ: 個人解讀是這樣有錯請其他大大開示 02/22 03:53
15F:→ serotw: 複製後在複製一次即可 02/22 08:51
17F:→ serotw: 解釋一下,你的寫法是複製一個物件,將該物件寫進去,但你 02/22 13:14
18F:→ serotw: 設定的變數還是寫進去那個物件,當你刪掉該物件就無法在新 02/22 13:14
19F:→ serotw: 增是正常的,至於為何只能新增一個而已,因為設定的變數就 02/22 13:14
20F:→ serotw: 只是你複製的物件,當你執行新增第二次就只是重覆將該物 02/22 13:14
21F:→ serotw: 件寫進去你要的地方。 02/22 13:14
22F:→ luckynu: 感謝樓上幾位大大的解說,看來我對於js的基礎有待加強。 02/25 16:14
23F:→ luckynu: 我原本的想法是認為該clone()的行為會直接回傳DOM的資料 02/25 16:14
24F:→ luckynu: 放在變數裡面,但結果應該只是存放function而已,這個應 02/25 16:14
25F:→ luckynu: 該是非嚴謹程式所造成的誤解。感謝大大的解釋。 02/25 16:14
27F:→ abcggg: 我的話會這樣用 參考看看 02/28 02:10