2017-03-08 2 views
1

Dans la structure suivanteJQuery Trouver plus proche parent avec classe

<div class="thisNot"> 
    <table style="width:100%" class="thisOneUknow"> 
     <tr> 
     <th id="imhere">Firstname</th> 
     <th>Lastname</th> 
     <th>Age</th> 
     </tr> 
     <tr> 
     <td>Jill</td> 
     <td>Smith</td> 
     <td>50</td> 
     </tr> 
     <tr> 
     <td>Eve</td> 
     <td>Jackson</td> 
     <td>94</td> 
     </tr> 
    </table> 
</div> 

Si je suis sur le $ (« # imhere »), Comment puis-je trouver le parent le plus proche avec une classe et d'extraire cette valeur? Dans ce cas get thisOne (en pensant toujours que je suis debout element element)

EDIT: la classe thisOneOknown est générée automatiquement, donc cela a changé à chaque chargement de page, donc le sélecteur a été capable de trouver le premier parent avec classer et stocker/retourner. Quelque chose comme var nearestParentClass = $ ('# imhere'). Closest (": hasParent()");

+0

On dirait que ce serait simple à google et trouver moins Theres quelque chose que je suis absent? Avez-vous [lu cette question SO ici] (http://stackoverflow.com/questions/5333426/how-to-find-a-parent-with-a-known-class-in-jquery)? – crazymatt

+0

$ ("# imhere"). Parents ("[classe]"). Ajouter un lien vers la documentation https://api.jquery.com/has-attribute-selector/ – Jules

+0

Oui, un détail très important me manque: La classe thisOne est inconnue pour moi, donc le sélecteur .thisOne n'est pas mon choix. Désolé à ce que je vais éditer la question –

Répondre

3

$('#imhere').closest('.thisOne');

mise à jour après la question éditée:

Je crains que je ne comprends pas ce que vous demandez maintenant, mais je vais prendre une supposition. Quelque chose comme ce qui suit devrait vous permettre de tester chaque parent jusqu'à la racine DOM:

var element = $($('.lobster')[6]); 
while((element = element.parent()).length){ 
    if(element.is('table')){ 
     break; 
    } 
} 

// element variable contains the matched DOM element 
+0

Désolé j'ai raté un détail important. ThisOne est généré automatiquement, donc je ne peux pas utiliser .thisone comme Selector. J'ai édité la question pour expliquer un peu plus –

+0

J'ai mis à jour ma réponse basée sur votre édition –

1

Vous pouvez utiliser la méthode du filtre, essayez cet exemple, je mets ensemble pour vous. J'espère que cela vous aide.

$(function() { 
 
    var tt= finder('.thisOne','#imhere'); 
 
    $('.result').append('<div>data found:'+tt.length+'</div>'); 
 
    
 
    // some unknow class 
 
    var ss= finder('.thisOne','#imNothere'); 
 
    $('.result').append('<div>data found:'+ss.length+'</div>'); 
 
    
 
}); 
 

 
function finder(searchMe, checkMe){ 
 
    return $(searchMe).filter(function(index) { 
 
    return $(this).find(checkMe).length > 0; 
 
    }); 
 
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
 
<div class="thisNot"> 
 
    <table style="width:100%" class="thisOne"> 
 
    <tr> 
 
     <th id="imhere">Firstname</th> 
 
     <th>Lastname</th> 
 
     <th>Age</th> 
 
    </tr> 
 
    <tr> 
 
     <td>Jill</td> 
 
     <td>Smith</td> 
 
     <td>50</td> 
 
    </tr> 
 
    <tr> 
 
     <td>Eve</td> 
 
     <td>Jackson</td> 
 
     <td>94</td> 
 
    </tr> 
 
    </table> 
 
</div> 
 
<div class="result"></div>

+0

Désolé j'ai raté un détail important. ThisOne est généré automatiquement, donc je ne peux pas utiliser .thisone comme Selector –

+0

Est-ce que cette classe ne va pas pour la table? pourquoi ne cherchez-vous pas la table à la place et filtrez avec id. –