不要从表格第一个孩子中删除内容

时间:2014-05-25 09:05:34

标签: javascript jquery html css-selectors

JSfiddle Example

我想排除第一个孩子中的文字被删除,以便文字SaleAge保留,例如:

原始HTML:

<table class="toptable"><thead>
  <tr>
    <th class="dsdds_image">-</th>
    <th class="r3dde_image">-</th>
    <th class="s43434_image">-</th>
    </tr></thead><tbody>
  <tr>
    <td class="44665_description">Name</td>
    <td class="3434d_description">Alan</td>
    <td class="a34df_description">John</td>
  </tr>
  <tr>
    <td class="dfs4rf_title">Age</td>
    <td class="adf43df_title">8</td>
    <td class="dsffds4_title">9</td>
    </tr></tbody>
</table>

remove()之后,它应该是

<table class="toptable"><thead>
  <tr>
    <th class="dsdds_image"></th>
    <th class="r3dde_image"></th>
    <th class="s43434_image"></th>
    </tr></thead><tbody>
  <tr>
    <td class="44665_description">Name</td>
    <td class="3434d_description"></td>
    <td class="a34df_description"></td>
  </tr>
  <tr>
    <td class="dfs4rf_title">Age</td>
    <td class="adf43df_title"></td>
    <td class="dsffds4_title"></td>
    </tr></tbody>
</table>

我使用if语句在remove函数之前检查它是否为:first-child,但它仍在清除第一个子文本。有人能给我一些建议吗?

$('#cleartable').on('click', function () {
 var clear = $(".toptable td,.toptable th")

if (clear.not(':first-child')){   //*******This part
 clear.contents().filter(function(){
    return this
   }).remove();
}
   clear.each(function() { 
   var $this = $(this)
   if ($this.attr('class')){ 
      var changeclass = $(this).attr("class");
      $this.attr('class',changeclass.replace(/^[^_]+/,"placeholder"));//See this? 
   }   

   });
});

3 个答案:

答案 0 :(得分:1)

尝试

Fiddle demo

clear.filter(function () {
        return $(this).index() !== 0; //return false for the first indexed element inside the parent
       //return !$(this).is(':first-child'); you can also use
}).remove(); //if you don't wanna remove them set empty text .text('') .

.index()

.filter()

.is()

答案 1 :(得分:1)

也许一个简单的方法:

var clear = $(".toptable td+td,.toptable th")

答案 2 :(得分:1)

在您使用的代码中

if (clear.not(':first-child'))

jQuery的.not()将返回一个jQuery实例而不是布尔值,所以这可能没有达到预期的效果。

快速简便地做你想做的事是

clear.not(':first-child').text('');