Подтвердить что ты не робот

Есть ли селектор/метод jQuery, чтобы найти определенный родительский элемент n уровней вверх?

Рассмотрим следующий HTML. Если у меня есть ссылка JSON на <button> элемент, как я могу получить ссылку на внешний <tr> элемент в обоих случаях

<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>

Я знаю, что я мог бы прибегать к какому-либо конкретному случаю, но меня больше интересует "каким бы глубоким вы ни были, поднимитесь на дерево, пока не найдете решение стиля элемента X". Что-то вроде этого, но больше jQuery как /less -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);
    }
};  

Я знаю о родительском (expr) методе, но из того, что я видел, вы можете отфильтровать родителей на один уровень и НЕ набирать дерево до тех пор, пока не найдете expr (я бы хотел, чтобы пример кода оказался неправильным)

4b9b3361

Ответ 1

Функция parents делает то, что вы хотите:

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

Ответ 2

Кроме того, если вы используете jQuery 1.3+, вы можете использовать метод closest

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

Ответ 3

не jQuery, но эти параметры работают намного лучше

node.contains(otherNode)

Метод Node.contains() возвращает логическое значение, указывающее, будет ли a node является потомком данного node или не

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