2016-06-18 32 views
0

當它到達線this.parentNode.removeChild(this);parentNode是未定義TR

我得到的錯誤

this.parentNode是不確定的

在我那個發言開始暫停調試器並看到「這個」是:Object[ tr#CMD01.selected ]這正是我所期望的。 parentNode如何定義?我在這裏搜索了很多類似的問題,並繼續找到「this」不正確的情況,但在我的情況下,它已經被調試器驗證。

$(document).ready(function() { 
 
    \t $.fn.deleteThisRow = function() { 
 
    \t \t this.parentNode.removeChild(this); 
 
    \t }; 
 
    }); 
 
    
 
    function deleteRow() { 
 
    \t $("#theList tr.selected").deleteThisRow(); 
 
    }
.selected { 
 
\t \t background-color: yellow 
 
\t } \t
<body> 
 
    \t <center id='bg'> 
 
    \t <table id="cmdList"> 
 
    \t \t <thead> 
 
    \t \t \t <tr id="hdrow"> 
 
    \t \t \t \t <th>Col1</th> 
 
    \t \t \t \t <th>Col2</th> 
 
    \t \t \t \t <th>Col3</th> 
 
    \t \t \t </tr> 
 
    \t \t </thead> 
 
    \t \t <tbody id="theList"> 
 
    \t \t \t <tr id="CMD00"> 
 
    \t \t \t \t <td>A1</td> 
 
    \t \t \t \t <td>A2</td> 
 
    \t \t \t \t <td>A3</td> 
 
    \t \t \t </tr> 
 
    \t \t \t <tr id="CMD01" class="selected"> 
 
    \t \t \t \t <td>B1</td> 
 
    \t \t \t \t <td>B2</td> 
 
    \t \t \t \t <td>B3</td> 
 
    \t \t \t </tr> 
 
    \t \t \t <tr id="CMD02"> 
 
    \t \t \t \t <td>C1</td> 
 
    \t \t \t \t <td>C2</td> 
 
    \t \t \t \t <td>C3</td> 
 
    \t \t \t </tr> 
 
\t \t </tbody> 
 
\t </table> 
 
\t <table id="buttons"> 
 
\t \t <tr> 
 
\t \t \t <td> 
 
\t \t \t \t <button onclick='deleteRow()'>Delete</button> 
 
\t \t \t </td> 
 
\t \t </tr> 
 
\t </table> 
 
\t </center> 
 
    </body>

+0

'this.remove()'將起作用 - 請參閱jfriend00的回答爲什麼您的代碼失敗。 –

回答

4

當你實現一個jQuery法,this值時,它被稱爲將是jQuery對象,而不是DOM對象。所以,this.parentNode不存在,因爲jQuery對象沒有該名稱的屬性。

你可以使用jQuery的.parent()或者你可以得到實際的DOM節點,然後使用.parentNode

如果您僅在一時間曾經處理單個DOM對象的打算,你可以這樣做:

$.fn.deleteThisRow = function() { 
    this[0].parentNode.removeChild(this[0]); 
}; 

如果jQuery對象中可能存在多個對象,那麼你可以這樣做:

$.fn.deleteThisRow = function() { 
    this.remove(); 
}; 

或者,你可能會注意到,你甚至不需要爲這個自定義方法。如果你有一個jQuery對象的行,你可以直接調用.remove()

function deleteRow() { 
    $("#theList tr.selected").remove(); 
} 
+0

非常感謝。擺脫自定義方法是最簡單的,並且正是我想要的。 –