jQuery: поиск братьев и сестер предков с подходящим содержанием / ходьба по дереву - PullRequest
0 голосов
/ 17 августа 2010
<table>
    <tbody>
      <tr>
     <td class="TargetRow">Not this one</td>
      </tr>
    </tbody>
    <tbody> ... </tbody>
    <tbody>
      <tr>
     <td class="TargetRow">This one</td>
      </tr>
    </tbody>
    <tbody> ... </tbody>
    <tbody>
        <tr class="ContextRow"> ... </tr>
    </tbody>
</table>

Учитывая приведенный выше HTML, я пытаюсь найти способ получения содержимого предыдущего tr класса TargetRow .Т.е. для первого предыдущего tbody, содержащего td.TargetRow , возвращаемое td.TargetRow

Я использую jQuery, в настоящее время я могу получить tbody , содержащий ContextRow, используя:

 jQuery(contextRow).parents("tbody").first()

Как теперь найти предыдущего брата этого tbody , который содержит tr.ContextRow ?

Если бы у меня был просто способ из contextRow пройтись по дереву DOM, пока вы не найдете элемент, соответствующий "td.TargetRow" , тогда это было бы идеально.

Большое спасибо.

Ответы [ 4 ]

1 голос
/ 17 августа 2010

Меня немного смущает ваше описание, но когда вы говорите "найдите предыдущего родного брата этого тела, содержащего tr.ContextRow" , звучит так, как будто вы хотите найти предыдущую <tbody>содержит элемент с классом .contextRow и получает его .targetRow.

Если это то, что вы хотите, попробуйте это.

jQuery(contextRow).parents("tbody:first")
                  .prevAll('tbody:has(tr.ContextRow):first td.TargetRow');

Если вы хотели сказать td.TargetRow, тогда выполните'tbody:has(td.TargetRow):first td.TargetRow'.

1 голос
/ 17 августа 2010
jQuery('.ContextRow').closest("tbody").siblings('tbody td.TargetRow:last'); 

РЕДАКТИРОВАТЬ: последний не первый

посмотреть, как это работает: http://jsfiddle.net/wU6h9/

0 голосов
/ 17 августа 2010

$(".ContextRow").closest("tbody").prevAll().find(".TargetRow").eq(0).css({color: "red"});

Возвращает один ближайший предыдущий .TargetRow

http://jsfiddle.net/LfWg3/3/

0 голосов
/ 17 августа 2010

Ближайший - .closest() делает именно то, что вам нужно.

Получает первый элемент-предок, соответствующий селектору, начиная с текущего элемента и продвигаясь вверх по дереву DOM.

Ваш запрос будет:

$('.ContextRow').closest('tbody').siblings('tbody td.TargetRow').last(); 

Он вернет один объект (в отличие от родителей, который возвращает несколько элементов до вершины), или ноль, если идентификатор не нашел его.

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