web-dev-qa-db-fra.com

Existe-t-il un sélecteur/une méthode jQuery permettant de rechercher un élément parent spécifique sur n niveaux?

Considérons le code 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 traiter chaque cas particulier, mais je suis plus intéressé "quelle que soit la profondeur de votre parcours, montez dans l’arbre jusqu’à ce que vous trouviez l’élément X". Quelque chose comme ça, mais plus jQuery comme/moins-verbose

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 vous permet de filtrer les parents d'un niveau supérieur et de NE PAS grimper à l'arbre tant que vous n'avez pas trouvé expr (j'aimerais que l'exemple de code me prouve le contraire)

48
Alan Storm

La fonction parents fait ce que vous voulez:

$(this).parents("tr:first");
93
Seb

De plus, si vous utilisez jQuery 1.3+, vous pouvez utiliser la méthode la plus proche

$(this).closest("tr");
43
bendewey

pas jQuery mais cela fonctionne beaucoup mieux

node.contains (otherNode) 

La méthode Node.contains () renvoie une valeur booléenne indiquant si un nœud est un descendant d'un nœud donné ou non

https://developer.mozilla.org/en/docs/Web/API/Node/contains

0
zloctb