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

Как вы идете назад через цепочку с помощью JQuery?

Я думал, что в jquery есть что-то, что позволило вам вернуться назад через цепочку.

Я хочу сделать это:

var a = $(this).parent().addClass('test').goBackToParent().children('selectorHere').text()

Я хочу получить родительский объект объекта, который у меня есть, и добавить к нему имя класса. Как только я это сделаю, я хочу пройти через своих детей и найти ребенка, который соответствует моему селектору и получить его текст.

Могу ли я это сделать, или мне нужно сделать это вместо этого:

$(this).parent().addClass('test');
var a = $(this).parent().children('selectorHere').text()

Edit

Теперь я использую "end", но это не работает. Я сделал пример, который вы можете попробовать здесь

<!DOCTYPE html>
<html>
<head>
<script class="jsbin" src="http://ajax.googleapis.com/ajax/libs/jquery/1/jquery.min.js"></script>
<meta charset=utf-8 />
<title>JS Bin</title>
<!--[if IE]>
  <script src="http://html5shiv.googlecode.com/svn/trunk/html5.js"></script>
<![endif]-->
<style>
  article, aside, figure, footer, header, hgroup,
  menu, nav, section { display: block; }
</style>
</head>
<body>
  <table>
    <th>
      <tr>one</tr>
      <tr>two</tr>
    </th>
    <tr>
      <td id="test"><a href="#"><img src="http://ais.web.cern.ch/ais/apps/hrt/SMT%20v2/Images/btnbar_edit.png" /></a></td>
      <td class="selectMe">1</td>
    </tr>
  </table>
</body>
</html>


$(function()
  {
      $('#test').click(function()
                       {
                           // does not work
                           var a = $(this).parent().addClass('afb').end().children('.selectMe').text();
                           // works
                           var b = $(this).parent().children('.selectMe').text();
                         alert(a + ' -should have value');
                          alert(b + ' -works');
                         return false;
                       });
  });
4b9b3361

Ответ 1

Вы ищете метод end():

var a = $(this).parent().addClass('test').end()
               .children('selectorHere').text();

Метод:

Завершает последнюю фильтрацию операции в текущей цепочке и возвращает набор согласованных элементов в его предыдущее состояние.

Обновить: на основе вашего html-фрагмента вам вообще не нужно end! Важная вещь в jQuery заключается в том, что большинство методов без обхода возвращают копию самих себя, поэтому, если вы вызываете $(this).addClass('test'), вы получаете копию $(this) назад.

Итак, для вашего фрагмента:

// does not work
var a = $(this)                       // points at #test
           .parent()                  // now refers to the tr which holds test
               .addClass('afb')       // still refers to the tr
               .end()                 // now we're back to #test
           .children('.selectMe')     // empty! there are no direct children of #test which match .selectMe
               .text();               // empty

Вместо этого попробуйте его без конца:

// works
var a = $(this)                       // points at #test
           .parent()                  // now refers to the tr which holds test
               .addClass('afb')       // still refers to the tr
           .children('.selectMe')     // found the .selectMe td
               .text();               // returns '1'

Ответ 2

Вы ищете метод end(). Просто используйте его вместо goBackToParent().

Большинство методов обхода JQuery DOM работать с экземпляром объекта jQuery и создать новый, соответствующий другой набор элементов DOM. когда это происходит, как будто новый набор элементов вставляется в стек который поддерживается внутри объекта. Каждый последующий метод фильтрации толкает новый элемент на стек. Если нам нужен более старый элемент set, мы можем использовать end() для появления наборов назад от стека.