2009-08-17 49 views
18

Quiero que mi secuencia de comandos resalte la fila que selecciono y funciona muy bien, pero cuando se selecciona/resalta una fila, quiero que sea "deseleccionada/descendida" si otra fila es seleccionada. ¿Cómo hago esto?Jquery: resaltar/resaltar la fila de la tabla al hacer clic

Aquí es código actual para la selección de una fila, se anula la selección, pero sólo si hago clic en la misma fila de nuevo:

$(".candidateNameTD").click(function() { 
      $(this).parents("tr").toggleClass("diffColor", this.clicked); 
     }); 

tabla HTML

<table id="newCandidatesTable"> 
    <thead> 
     <tr> 
      <th style="cursor: pointer;">ID</th> 
      <th style="cursor: pointer;">Navn</th> 
      <th style="cursor: pointer;">Email</th> 
      <th></th> 
     </tr> 
    </thead> 
    <tbody> 
    <% foreach (var candidate in Model.Ansogninger) 
    { 
     %> 
      <tr id="<%= candidate.AnsogerID %>" class="newCandidatesTableTr"> 
       <td><div id="candidateID"><%= candidate.AnsogerID %></div></td> 
       <td><div id="<%= "candidateName_" + candidate.AnsogerID %>" class="candidateNameTD"><%= candidate.Navn %></div></td> 
       <td><div id="candidateEmail"><%= candidate.Email %></div></td> 
       <td> 
        <div id="<%= "acceptCandidateButton_" + candidate.AnsogerID %>" class="acceptb" style="cursor: pointer; border: 1px solid black; width: 150px; text-align: center;">Godkend</div> 
       </td> 
      </tr> 
     <% 
    } %> 
    </tbody> 
    </table> 

Respuesta

22

Primero, podría anular la selección de todos filas, como

$(".candidateNameTD").click(function() { 
     $(this).closest("tr").siblings().removeClass("diffColor"); 
     $(this).parents("tr").toggleClass("diffColor", this.clicked); 
    }); 

editar: yep, sry, pero th e idea era correcta;)

+0

Esto solo anulará la selección de la fila cliqueada. –

+0

gracias, utilicé su idea ... fue la más lógica para mí :) – Poku

+1

por cierto si tiene tablas anidadas, esto coincidirá con todos los tr. lo más cercano es mejor – redsquare

6
$(".candidateNameTD").click(function() { 
      $("tr").removeClass("diffColor"); 
      $(this).parents("tr").addClass("diffColor"); 
     }); 
4

Esto sólo afectará a la tabla actual:

$(".candidateNameTD").click(function() { 
    $('table#newCandidatesTable tr').removeClass("diffColor"); 
    $(this).parents("tr").addClass("diffColor"); 
}); 
0

Mejor utilizando .live. Un evento es preferible a muchos (piense en una gran mesa, grandes gastos generales).

$("div.candidateNameTD").live('click'. function() { 
    var $tr = $(this).closest("tr"); 
    //remove any selected siblings 
    $tr.siblings().removeClass('diffColor'); 
    //toggle current row 
    $tr.toggleClass('diffColor');   
}); 
+0

@redsquare - no es necesario a menos que esté agregando/inyectando dinámicamente filas. – karim79

+0

es si tiene muchas filas. 1 evento mejor que 100 – redsquare

Cuestiones relacionadas