[問題] javascript關於table insertRow的問題

看板Ajax作者 (Godhand)時間12年前 (2013/11/08 14:21), 編輯推噓1(1011)
留言12則, 4人參與, 最新討論串1/1
案例如下,有張table需要根據某些td內的text值去做重新排序的動作 ex: ┌───┬───┐ ┌───┬───┐ │price │amount│ │price │amount│ ├───┼───┤ ├───┼───┤ │ 200│ 1│ │ 300│ 4│ ├───┼───┤ ├───┼───┤ │ 300│ 4│ => │ 200│ 1│ ├───┼───┤ ├───┼───┤ │ 100│ 2│ │ 100│ 2│ └───┴───┘ └───┴───┘ 在重新排序的部分,我是讓扣除第一列的欲比較的td內的text與該列之tr obj 成為一個長度為2的陣列,再將這些陣列集合組成一個二維陣列,結構如下 {[200,table.rows[1]].[300.table.rows[2]],[100,table.rows[3]]} 根據此二維陣列每個元素的第一個值去做Array.sort(); sort完畢後將排序過後的table.rows用appendChild()的方式貼回該table 而問題出在,當想要對重新排序過後的table使用table.insertRow()來動態產生新tr時 想要產生的tr索引位置從0到倒數第二行都沒問題,但是想要把新tr產生在最後一行時 (row index = table.rows.length),新的tr卻會產生在price amount那一行之下 P.S. 若是將price amount那一行也重新appendChild到table第一行,新的tr則會產生在 price amount那一行之上 目前暫時能想到的解決方式是將一個空白tr放在尾行,重新排序時也將它固定append到 最後一行,不曉得板上有哪位大大清楚這個bug的成因為何,是否有更漂亮的解決方式? -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 36.224.204.115

11/08 14:42, , 1F
有試試用 thead / tbody 直接把表頭分開嗎?
11/08 14:42, 1F

11/08 14:59, , 2F
有 結果也是一樣 不曉得是不是appendChild後 會導致tr的最後
11/08 14:59, 2F

11/08 14:59, , 3F
一個索引+1時的位置不會變成最下面
11/08 14:59, 3F
發現這應該是browser的問題,開發環境我使用IE10,而在FF or Chrome就沒有這個問題 ※ 編輯: stw82 來自: 36.224.204.115 (11/08 16:54)

11/08 16:57, , 4F
涉及dom結構還是用jQuery吧 不然跨瀏覽器真的各種問題
11/08 16:57, 4F

11/08 16:57, , 5F
都可能發生....
11/08 16:57, 5F

11/08 21:32, , 6F
程式貼到 http://jsfiddle.net/ 再來問比較容易找錯
11/08 21:32, 6F
http://jsfiddle.net/x5qjn/2/ 雖然已經知道是瀏覽器問題了 但還是有點好奇如果不用jQuery的話 能否用純javascript解掉它 ※ 編輯: stw82 來自: 123.192.203.129 (11/09 15:21)

11/09 21:23, , 7F

11/09 21:25, , 8F
看起來是 ie對 table裡的 tbody處理有 bug
11/09 21:25, 8F

11/09 21:26, , 9F
& jquery能解一定是純 javascript有解
11/09 21:26, 9F

11/11 01:47, , 10F
其實不用thead tbody包起來 就IE來說也是一樣
11/11 01:47, 10F

11/11 01:48, , 11F
appendChild過後 最後一行的row index拿來insertRow就是
11/11 01:48, 11F

11/11 01:48, , 12F
會有問題 不過有點懶得去翻jQuery那一大包就是了._.
11/11 01:48, 12F
文章代碼(AID): #1IV8BU62 (Ajax)
文章代碼(AID): #1IV8BU62 (Ajax)