--- tags: homework --- https://codepen.io/Jao_11102/pen/BaqNzVX 問題1 ``` javascript function ondragstart(e) { const tr = e.target.closest("tr"); // 這邊有確實抓到 <tr></tr>, 但仔細看他並沒有 data-id 屬性 console.log("tr", tr); e.dataTransfer.setDragImage(tr, 300, 50); // 因為沒有 data-id 屬性, 所以 getAttribute 出來是 null draggingTaskId = tr.getAttribute("data-id"); console.log("draggingTaskId", draggingTaskId); } ``` 問題2 ``` javascript function ondragenter(e) { // 這邊也是一樣, <tr> 並沒有 data-id, 所以抓出來也是 null dropTargetTaskId = e.target.closest("tr").getAttribute("data-id"); console.log("dropTargetTaskId", dropTargetTaskId); } ``` 所以 data-id 到底是什麼?要怎樣才能讓 `<tr>` 有 data-id 呢?首先 data-id 並不是一個內建的屬性, 而是寫程式的人自己加上去的屬性, 之所以要加上去是因為我們需要知道該 `<tr>` 位於什麼位置,而在 drag 事件中交換抓起來與放下去的 `<tr>` 圖解: ![](https://i.imgur.com/IlESsJN.png) ![](https://i.imgur.com/IPcKkaj.png) ![](https://i.imgur.com/izqs8Ff.png) 問題3 ```javascript= function onDragEnd() { if ( draggingTaskId === undefined || dropTargetTaskId === undefined || draggingTaskId === dropTargetTaskId ) return; // 在我的範例中有寫了一個 exchangeTask function, 但在這裡沒有, 所以當然不會有功能 exchangeTask(draggingTaskId, dropTargetTaskId); draggingTaskId = undefined; dropTargetTaskId = undefined; } ``` 解決辦法: 1. 想辦法在 tr 中加入 data-id 2. 交換 tr