Существует ли селектор / метод jQuery для поиска определенного родительского элемента на n уровней? - PullRequest
48 голосов
/ 31 марта 2009

Рассмотрим следующий HTML. Если у меня есть ссылка JSON на элемент

<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 вроде / менее-многословный

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);
    }
};  

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

Ответы [ 3 ]

95 голосов
/ 31 марта 2009

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

$(this).parents("tr:first");
43 голосов
/ 31 марта 2009

Также, если вы используете jQuery 1.3+, вы можете использовать ближайший метод

$(this).closest("tr");
0 голосов
/ 31 января 2017

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

node.contains (otherNode)

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...