2010-10-20 7 views

ответ

1

Вы можете уплотнить его некоторые:

$(this).parent().find('> .vote_count > span.number') 

Live example

Это имеет преимущество разгружая как можно больше, чтобы двигатель селектора (вместо того, чтобы индивидуальные вызовы функций), где он может возможно. (Это не обязательно, просто, что вы делаете это возможным.) В отличие от некоторых других решений здесь, он не пропустит текущий элемент, если это .vote-count, он уважает ваше использование функций с немедленным ребенком, а чем функции потомков, и, кроме того, это просто. Впрочем, твоя оригинальная версия тоже мне понравилась.

Ваш оригинальный рассматривает только непосредственные дети, которые я предполагаю, что было преднамеренным, но только для полноты картины, я упомяну:

Если вы хотите найти .vote-count по крайней любого уровня под родителя, и искать немедленного дети из них, которые span.number, сделать это вместо того, чтобы:

// Slightly different from your original, see comment above 
$(this).parent().find('.vote_count > span.number') 

Если вы хотите, чтобы найти .vote-count S, которые немедленные детей, но затем найти span.number под ними, где бы они (даже если не непосредственные дети), сделайте следующее:

// Slightly different from your original, see comment above 
$(this).parent().find('> .vote_count span.number') 

... и, наконец, если вы хотите найти .vote-count где-нибудь под родителя (не только как непосредственный ребенок) и найти какой-либо span.number под ним (а не только как непосредственный ребенок):

// Fairly different from your original, see comment above 
$(this).parent().find('.vote_count span.number') 
3

как о

$("> .vote_count > span.number", $(this).parent()) 

или

$("> span.number", $(this).siblings(".vote_count")) 

или

$("~ .vote_count > span.number", this) 

или

$(this).find("~ .vote_count > span.number")` 

с использованием sibling selector и child selector

+0

приятный. Примите ответ, как только он позволит мне. Не знаю, почему я должен ждать! –

+0

@Mild Fuzz: Обратите внимание, что это * не * то же, что и ваш оригинал. Они используют селекторы * потомков *, а не непосредственные дочерние селекторы. –

+0

@TJ хороший момент, думал, что маловероятно, что эти дети будут глубже в иерархии, это будет более кратким. – hunter

0
$(this).parent().find(".vote_count > span.number"); 

одна альтернатива.

+0

Использует селектор потомков для части '.vote-count'. ОП использовала селектор немедленного действия. –

+0

Yup, совершенно верно. Я не понял, что find() примет ведущий комбинатор (например, «>»), но я рад, что узнал, что сегодня! –

2

Как насчет использования .siblings?

$(this).siblings('.vote_count').children('span.number'); 

В конце концов, дети моих родителей - мои братья и сестры.


Редактировать согласно комментарий @patrick Dw, в случае вам необходимо убедиться, что this также включен *, то вы можете использовать .andSelf():

$(this).siblings('.vote_count').andSelf().children('span.number'); 

После недолгого обсуждения с patrick (см. комментарии), похоже, лучший ответ, скорее всего, тот, который у вас уже есть: $(this).parent().children('.vote_count').children('span.number'), если вы не можете сделать предположения о this в зависимости от того, как вы его выбрали.


* Первый ответ (тот, который не использует andSelf()) предполагает, что this не .vote_count.

+1

Это может быть проблемой, если 'this' также является элементом' .vote_count'. В этом случае он будет исключен. Не уверен, что это ситуация здесь. – user113716

+0

@patrick: «это» будет исключено, несмотря ни на что, но я понимаю, что вы имеете в виду. Редактирование соответственно. –

+0

Matt - В вопросе 'this' не будет исключен, если' this' является элементом '.vote_count', потому что' .parent(). Children ('. Vote_count') 'будет включать' this' в элементы, являющиеся , а '.siblings ('. vote_count')' не будет. – user113716

0

Я не совсем уверен, если это то, что вы ищете:

$(this).parent().find('.vote_count > span.number') 
+1

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

+0

Правда. Это изменилось. Благодарю. – RoToRa

1

Лично я думаю, что вы отлично придерживаетесь своей оригинальной версии, хотя я могу изменить ее, чтобы исключить вызов .parent(), используя собственное свойство .parentNode.

$(this.parentNode).children('.vote_count').children('span.number')