2016-06-18 29 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

非常感谢。摆脱自定义方法是最简单的,并且正是我想要的。 –