為什么刪除原有的兩行刪不掉?和點贊最多的答案區(qū)別在哪里?
function?del(obj){ ????????//這種方法會導致已有的兩個刪不掉?。。?????????//var?table=document.getElementById("table"); ????????//table.removeChild(obj.parentNode.parentNode); ????????//這是點贊最多的答案 ????????var?tr=obj.parentNode.parentNode; ????????tr.parentNode.removeChild(tr); ????}
到底問題出在什么地方?
2017-02-23
因為你取的ID不對,你直接取ID為table的元素,那他的父級父級就找不到元素了,所以無法刪除。
而答案是從他點擊事件的那個a標簽開始的,所以取3個父級就取到了tr,然后刪除就有效。
2017-03-01
我一開始也遇到了你這個問題,后來我想看看傳入的obj.parentNode.parentNode的父級元素即obj.parentNode.parentNode.parentNode到底是不是table,就輸入了以下代碼。
結果alert彈出的結果卻是TBODY而不是table,后來經(jīng)過一番尋找,在別人的解答中發(fā)現(xiàn)了這張圖:
"table完整地寫法是上述這張圖,而我們平時寫代碼一般都省略其內部的三個子節(jié)點<thead> <tfoot> <tbody>,<tr>存在<tbody>中,<tbody>為<tr>父節(jié)點,但你運行代碼時,瀏覽器會自動給你添加<thead> <tfoot> <tbody>"
到這里,我就明白原因了。當我們通過id獲取table時,<table>與<tr>之間還有<tbody>。
?????? var?table=document.getElementById("table");
?????? table.removeChild(obj.parentNode.parentNode);
在這句代碼中,table代表的是<table>節(jié)點,obj.parentNode.parentNode代表的是<tr>,由于<table>的子節(jié)點是<thead> <tfoot> <tbody>而不是<tr>,所以使用removeChild()刪除時會失敗。
而點贊最多的答案即:
??????? var?tr=obj.parentNode.parentNode;
????????tr.parentNode.removeChild(tr);
這里是直接用tr.parentNode來刪除tr這個節(jié)點(tr.parentNode這個節(jié)點一定是tr的父節(jié)點吧),? 所以可以成功刪除。
你也可以自己編寫代碼測試一下。 ??
?
2017-02-25
這回答不靠譜啊 取的ID不是<TABLE >應該也是<A>吧 是obj.的父類的父類 又不是TABLE的父類的父類