применить селектор jquery к объекту, соответствующему hover - PullRequest
0 голосов
/ 25 сентября 2011

По какой-то причине .add в последней строке не работает должным образом, все :first-child в документе изменены, я хочу, чтобы только :first-child из объекта поиска был изменен. Я перепробовал все, что мог придумать, понятия не имею, в чем проблема.

jQuery.fn.img=function(background,param,repeat)
    { $(this).css('background-image','url(/static/img/'+background+'.png')
             .css('background-repeat',repeat)
             .css('background-position',param+' top');}

$('#sliding-door li').hover(function(e)
{$(this).img('b1_middle_focus','left','repeat-x');
 $(this).add(':first-child span').img('b1_left_focus','left','no-repeat');},

HTML:

<ul>
          <li><a href="/href1"><span><span>Something</span></span></a></li>
          <li><a href="/href2"><span><span>Another thing</span></span></a></li>
 </ul>

1 Ответ

1 голос
/ 25 сентября 2011

Обновление

Я вижу, что вы пытаетесь сделать сейчас.Если вам все еще нужно, чтобы функция наведения применялась ко всем li s, при тестировании первого дочернего элемента только для одной подпрограммы можно использовать оператор if:

$('#sliding-door li').hover(function(e) {
    $(this).img('b1_middle_focus','left','repeat-x');

    if ($(this).is(':first-child')) {
        $(this).find('span').img('b1_left_focus','left','no-repeat');
    }
}, ...);

Старый ответ, игнорируйте

Если вы ищете span в первом дочернем элементе $(this), вы хотели использовать $(this).find() вместо $(this).add():

$(this).find(':first-child span').img('b1_left_focus','left','no-repeat');

.add() добавляет все элементы, соответствующие селектору :first-child span на уровне документа, к объекту $(this), что не совсем то, что вы ожидаете от него.См. Документы JQuery: http://api.jquery.com/add

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