Considérons le HTML suivant. Si j'ai une référence JSON à l'élément <button>, comment puis-je obtenir une référence à l'élément <tr>extérieur dans les deux cas ?
<table id="my-table">
<tr>
<td>
<button>Foo</button>
</td>
<td>
<div>
<button>Bar</button>
</div>
</td>
</tr>
</table>
<script type="text/js">
$('#table button').click(function(){
//$(this).parent().parent() will work for the first row
//$(this).parent().parent().parent() will work for the second row
//is there a selector or some magic json one liner that will climb
//the DOM tree until it hits a TR, or do I have to code this myself
//each time?
//$(this).????
});
</script>
Je sais que je pourrais faire un cas particulier pour chaque condition, mais je suis plus intéressé par une solution du style "quelle que soit la profondeur de votre arbre, grimpez jusqu'à ce que vous trouviez l'élément X". Quelque chose comme ça, mais plus proche de JQuery et moins verbeux.
var climb = function(node, str_rule){
if($(node).is(str_rule)){
return node;
}
else if($(node).is('body')){
return false;
}
else{
return climb(node.parentNode, str_rule);
}
};
Je connais la méthode parent(expr), mais d'après ce que j'ai vu, elle permet de filtrer les parents d'un niveau supérieur et de ne PAS monter dans l'arbre jusqu'à ce que vous trouviez expr (j'aimerais avoir un exemple de code prouvant que j'ai tort).