[ js ] 使用clone()複製DOM的疑問

看板Ajax作者 (黑得發亮)時間7年前 (2017/02/20 20:07), 7年前編輯推噓3(3024)
留言27則, 5人參與, 最新討論串1/1
先附上程式碼 http://codepen.io/luckynu/pen/RKzyRL/?editors=1010 原本是要用clone()將DOM的資料一直堆疊下去 但是出現了一個問題, 只能複製一次,第二次後都不會執行複製的命令, 如果把複製出來的刪除,就可以在一次複製,但還是不會超過2各 還請幫忙解答 感謝 -- ^^ ─┼─╯ ↙╰─╯ -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 218.164.23.204 ※ 文章網址: https://www.ptt.cc/bbs/Ajax/M.1487592449.A.837.html

02/20 21:34, , 1F
複製的刪除後 再按複製一樣沒反應喔
02/20 21:34, 1F

02/20 21:35, , 2F
因為clone那行只執行了一次 第一次按是把複製品放到最後
02/20 21:35, 2F

02/20 21:35, , 3F
第二次按就是把複製品拿出來又放回去了
02/20 21:35, 3F

02/21 07:54, , 4F
first的結果是整個sel的element你是要複製第一個selectName
02/21 07:54, 4F

02/21 07:55, , 5F
嗎?我用$("div.sel").children().eq(0).clone()然後把這個
02/21 07:55, 5F

02/21 07:55, , 6F
這個宣告放到click event裡就可以了
02/21 07:55, 6F
我的想法是不要每次執行的時候再執行一次$("div.sel").first().clone();這個動作 所以才想要將這個資料存於全域資料理面 → luckynu: 感謝兩個大大回答,大概可以知道運作的結果,原理需要再 02/21 12:23

02/21 12:23, , 7F
研究一下。
02/21 12:23, 7F

02/21 12:29, , 8F
原本的想法是用clone()複製出來的Dom資料存儲成全域資料
02/21 12:29, 8F

02/21 12:29, , 9F
,後續貼上的時候就不用再執行一次複製的動作,並且可以
02/21 12:29, 9F

02/21 12:29, , 10F
維持資料的初始值。
02/21 12:29, 10F
※ 編輯: luckynu (218.164.23.204), 02/21/2017 13:53:24

02/22 03:49, , 11F
應該是clone這個動作是跟createElement是一樣把記憶體地址
02/22 03:49, 11F

02/22 03:50, , 12F
存在你assign的變數了所以要create新的元件的話就是要再
02/22 03:50, 12F

02/22 03:50, , 13F
clone一次$("div.sel").last().after(clonedataaaa.clone())
02/22 03:50, 13F

02/22 03:53, , 14F
個人解讀是這樣有錯請其他大大開示
02/22 03:53, 14F

02/22 08:51, , 15F
複製後在複製一次即可
02/22 08:51, 15F

02/22 08:57, , 16F

02/22 13:14, , 17F
解釋一下,你的寫法是複製一個物件,將該物件寫進去,但你
02/22 13:14, 17F

02/22 13:14, , 18F
設定的變數還是寫進去那個物件,當你刪掉該物件就無法在新
02/22 13:14, 18F

02/22 13:14, , 19F
增是正常的,至於為何只能新增一個而已,因為設定的變數就
02/22 13:14, 19F

02/22 13:14, , 20F
只是你複製的物件,當你執行新增第二次就只是重覆將該物
02/22 13:14, 20F

02/22 13:14, , 21F
件寫進去你要的地方。
02/22 13:14, 21F

02/25 16:14, , 22F
感謝樓上幾位大大的解說,看來我對於js的基礎有待加強。
02/25 16:14, 22F

02/25 16:14, , 23F
我原本的想法是認為該clone()的行為會直接回傳DOM的資料
02/25 16:14, 23F

02/25 16:14, , 24F
放在變數裡面,但結果應該只是存放function而已,這個應
02/25 16:14, 24F

02/25 16:14, , 25F
該是非嚴謹程式所造成的誤解。感謝大大的解釋。
02/25 16:14, 25F


02/28 02:10, , 27F
我的話會這樣用 參考看看
02/28 02:10, 27F
文章代碼(AID): #1Ogjm1Wt (Ajax)