2013-06-17 2 views
2

Если у меня есть такое заявление:Возвращаясь к исходному селектору в цепочке?

$('a:first').parent().next().css('color', 'red'); 

Как вернуться к исходному объекту JQuery $('a:first')?

Люди предлагают end(), но он возвращается только на 1 шаг, я хочу пройти весь путь до первой части цепи.

EDIT: Итак, причины, я хочу это потому, что это выражение не работает:

$(this).parent().remove().next().show(); 
+1

Я смущен .. что вы пытаетесь делать? Если вам нужно '$ ('a: first')' вы не можете просто сделать '$ ('a.first'). Doit()' еще раз? – PaulProgrammer

+0

@PaulProgrammer См. Мое редактирование. – silkfire

+0

Исходя из этого, я рекомендую предложение @ meagar. – PaulProgrammer

ответ

4

Если вы хотите «магазин» a:first, а затем применить дополнительные селекторы к нему, не теряя его , вы должны магазин это:

var $firstA = $('a:first'); 

$firstA.parent().next().css('color', 'red'); 
+0

Вы не найдете более простого или быстрого решения. Вы не должны проходить через DOM с помощью вызовов 'end' или' addBack' для доступа к элементу, который вы уже выбрали. – meagar

+0

Gah, это действительно самый эффективный и правильный ответ! +1 – lifetimes

1

Что я могу думать в этом случае используется .end() дважды:

$('a:first').parent().next().css('color', 'red').end().end() 

Хотя это выглядит не очень хорошо, оно работает так, как вам нужно, и вам нужно будет использовать его для каждого шага назад, который вы хотите. К сожалению, у jQuery нет метода, такого как .endAll(), чтобы вернуть вас к исходному селектору, поэтому вы можете сделать то, что предложили meagar, и сохранить оригинал в переменной ...

+0

Да, я тоже подумал об этом решении, но потом мне нужно отслеживать, сколько объектов у меня в стеке. Есть ли где-нибудь я могу предложить разработчикам jQuery для них добавить функцию endAll в ядро? – silkfire

+2

@silkfire Нет, потому что это * решена проблема *. Каждый раз, когда вы думаете, что вам нужен 'endAll()', это потому, что вы не просто сохраняете свои первоначально выбранные элементы в переменной для повторной ссылки. Вы * подразумеваете *, чтобы кэшировать выбранные вами элементы таким образом, если вы хотите использовать их повторно. – meagar

Смежные вопросы