2010-06-28 5 views
0

Mon javascriptjQuery il suffit de sélectionner le premier

  $(".controls").click(function(event) { 

        var div = $(event.target).parents(".controls"); 

        var a = $(div).find("tr .select"); 


      return false; 
     }); 

Et html

<div id="grid1" class="controls"> 

    <a href="/projekt/create">Add</a> 
    <a href="/projekt/edit">Edit</a> 

</div> 


<div id="grid2" class="controls"> 

    <a href="/uloha/create">Add</a> 
    <a href="/uloha/edit">Edit</a> 

    <table> 
    <tr id="1"></tr> 
    <tr id="2" class="select"></tr> 
    <tr id="3"></tr> 

    </table> 

</div> 

Je voudrais sélectionner le premier TR qui a de la classe select. J'ai essayé

var a = $(div).find("tr:first .select"); 

ou

var a = $(div).find("tr .select:first"); 

mais aucun d'entre eux travaillaient.

+0

Je suis assez sûr que cela peut être résolu avec un design repenser .. On dirait que vous êtes trop compliquer les choses. soin d'élaborer à tout le but de ce script ? – Jeriko

+0

Voulez-vous que les choses se déclenchent en cliquant sur # grid1 ou # grid2, ou seulement si # grid1 est cliqué? –

+0

J'aimerais avoir plusieurs grilles sur une page. Une div de grille contient une table et une div de contrôle où sont plusieurs boutons. Chaque bouton a son propre but (ajouter, éditer, supprimer, rechercher). Si quelqu'un clique sur un bouton, je dois obtenir la ligne sélectionnée dans la table appropriée. – user137348

Répondre

6

Vous pouvez essayer ceci:

var a = $("tr.select", div).first(); 

ou

var a = $("tr.select:first", div); 

Comme il n'y a :first et first().

Pour sélectionner tout cela dans ce que vous utilisez:

$(this, that) 

Would quelque chose comme ce travail?

$(".controls").click(function(event) { 
    var a = $("tr.select:first", ".controls"); 
    // do stuff with a.... 
    return false; 
}); 

Cela change « deux » à bien, mais pas « quatre » lorsque vous appuyez sur le bouton.

<div class="controls"> 
    <input type="button" value="Click the control" /> 
</div> 
<div id="grid2" class="controls"> 
    <table> 
     <tr id="1"><td>one</td></tr> 
     <tr id="2" class="select"><td>two</td></tr> 
     <tr id="3"><td>three</td></tr> 
     <tr id="4" class="select"><td>four</td></tr> 
    </table> 
</div> 
<script type="text/javascript"> 
    $(".controls input").click(function(event) { 
     var a = $("tr.select:first", ".controls"); 
     $(a).text("okay"); 
     return false; 
    }); 
</script> 

(Comme une note de côté, ceux qui ne sont pas appropriés noms d'identification, ils ne peuvent pas commencer par un numéro si vous voulez valid html)

2

Qu'en est-il de l'utilisation de l'index?

var a = $(div).find("tr.select")[0] 

/* I think that's the right syntax */ 
+1

La question demande l'élément tr avec une classe select. Votre solution (tr .select) recherche le premier élément enfant avec une classe select. – istruble

+0

Ah, c'est vrai. Corrigé (espace supprimé) – Armstrongest

2

Vous pouvez utiliser la fonction first() pour cela.

var a = $(div).find("tr.select").first(); 
6

Je suis assez sûr de ce que vous voulez est la suivante:

var a = $(div).find("tr.select:first"); 

Dans sélecteurs jQuery, des espaces séparés niveaux dans la hiérarchie.

Si je le sélecteur "tr:first .select" il regarderait dans le premier tr et retourner tous les enfants qui ont la classe select.

Si j'utilisais le sélecteur "tr .select:first", il rechercherait dans chaque tr et renverrait le premier élément enfant avec la classe select pour chaque tr.

+0

Quel est l'avantage/la différence d'utiliser $ (div) .find ("tr.select:first"); vs $ ("tr.select:first", div); ? –

+0

@Peter Ajtai: Autant que je sache, ils font exactement la même chose. Ce serait une chose intéressante à profiler, cependant. – Powerlord

+0

@R. Bemrose - Merci, c'est ce que je pensais aussi, je n'étais pas sûr. Ce serait intéressant à regarder. –

Questions connexes