Проблема с функцией jQuery (родитель / потомок) - PullRequest
1 голос
/ 16 июля 2011

У меня небольшая проблема со сценарием jQuery, который я написал.

У меня есть такая HTML-структура:

<div id="navigation">
  <ul>
    <li><a href="Link1"><b>Text1</b></a></li>
    <li><a href="Link2"><b>Text2</b></a></li>
    ...
  </ul>
</div>

Затем у меня есть функция click, связанная с этими li /вкладки, которые устанавливают значение текущей страницы в href:

var currentpage = $(this).attr('href');

И, наконец, функция обновления, которая запускается, когда это необходимо, которая делает много вещей, но также изменяет стиль выбранной в данный момент библиотеки./ a tab:

$('#navigation a').each(function()
{
  var tab = $(this);
  tab.parent().toggleClass('current', (tab.attr('href') == currentpage));
});

Все работает нормально, но сегодня я пытался переписать последнюю функцию только в одну строку - без вызова each () - и не могу заставить ее работать.Я пробовал много решений, таких как:

$('#navigation a').parent().toggleClass('current', ($(this).children(':first').attr('href') === currentpage));

$('#navigation a').parent().toggleClass('current', ($(':only-child', $(this)).attr('href') == currentpage));

Может кто-нибудь помочь мне?Спасибо!

Ответы [ 2 ]

3 голосов
/ 16 июля 2011

Вы не можете переписать его так, как хотели бы.

Оригинальный код должен использовать ".each ()", потому что ему нужен доступ к каждому отдельному элементу <a>, чтобы сделать еговещь.При переписывании вы представляете, что вы можете установить this для каждого обрабатываемого элемента, но это не совсем так, как this работает в JavaScript.В вашей попытке перезаписи значение this в этих параметрах для "toggleClass ()" будет равно this, поскольку оно стоит вне всей цепочки вызовов функции jQuery.Это не будет иметь абсолютно никакого отношения к элементам <a>, обрабатываемым вызовом toggleClass ().

0 голосов
/ 16 июля 2011

когда ваша функция срабатывает, т. Е. Нажав на эту функцию, вы можете получить ссылку на элемент, по которому щелкнули, тег с помощью $ (this).Тогда ваш код должен быть

    $(this).parent().toggleClass('current', ($(this).children(':first').attr('href') === currentpage));
...