jQuery батьківський з батьків


93

На даний момент я намагаюся знайти батьківського елемента з батьківського елемента. У мене клацне посилання, яке знаходиться в <td>, і я хотів би отримати <tr>об’єкт.

Чому не звична робота "$ (this) .parent (). Parent ()"? Що буде?

Дякую,
Брендене

Редагувати: Здається, помилка в моєму синтаксисі відкинула все це. "$ (this) .parent (). parent ()" насправді працює, але я завершив роботу з $ (this) .closest ('tr') ", оскільки це здається найбільш ефективним рішенням.


1
не могли б ви опублікувати код, щоб ми побачили, чому ваш батьківський селектор не працює?
TStamper

Відповіді:


221

Найкращим способом було б, можливо, використання closest:

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

Ознайомтеся з документацією :

Найближче працює, спочатку переглянувши поточний елемент, щоб перевірити, чи відповідає він вказаному виразу, якщо так, він просто повертає сам елемент. Якщо він не збігається, він буде продовжувати обводити документ, батьківський за батьківським, поки не буде знайдено елемент, який відповідає вказаному виразу. Якщо не знайдено відповідного елемента, жоден не повернеться.


20

Це має працювати. Ви також можете спробувати $ (this) .parents (tag), де тег - це тег, який ви хочете знайти.

Наприклад:

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

Знайде найближчий тр "вгору по ланцюгу".


9

Це має спрацювати ... Ви можете спробувати

$(this).parents(':eq(1)');

.Parents (селектор) каже, що отримують усіх предків, які відповідають селектору

і:: eq (1) говорить знайти перший (нульовий індекс, тобто другий) елемент у списку


Ви можете спробувати попередити це, щоб переконатися, що це тег прив'язки html. Спробуйте виконати: alert ('anchor html (' + $ (this) .html () + ')');
Латан

6

Цей фрагмент раніше виконував для мене:

$(this).parent().parent(); 

Напишіть нам код, щоб побачити, чи не є десь інша проблема ...


Я згоден з цим. Я можу використовувати $(this).parent().parent()без випуску
DrewT


2

Якщо у вас є будь-який ідентифікатор / клас для батьків, ви можете використовувати батьків (), але це дасть вам всім батькам можливість перейти до <body>, якщо ви не фільтруєте () або не зупините це іншим способом, як

$(this).parents('.myClass');

Сподіваюся, це комусь допомагає :)


1

Спробуйте обернути $ (this) .parent () в такий об'єкт jQuery, як $ ($ (this) .parent ()) Я часто виявляю необхідність зробити це, щоб переконатися, що у мене є дійсний об'єкт jquery. Звідти ви зможете влаштуватись з батьками батьків, або, можливо, скориставшись функцією prev ().


8
Це абсолютно безглуздо. Все, що ви робите, - це витрачати час, створивши ще один об’єкт jQuery ...
Джеймс

1
var getParentNode = function(elem, level) { 
    level = level || 1; 
    for (var i = 0; i < level; i++) {
        if (elem != null) {
            elem = elem.parentNode; 
        }
    }
    return elem; 
}

0

.closest() не завжди найкращий варіант, особливо коли у вас однакова конструкція елементів.

<div>
    <div>
        <div>
        </div>
    </div>
</div>

Ви можете зробити батьків батьків, і це дуже просто:

var parent = $('.myDiv').parent();
var parentParent = $(parent).parent();
var parentParentParent = $(parentParent).parent();

тощо.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.