PHP, jQuery, выбор всех div в родительском div

Я ищу обобщенную функцию выбора, которая делает следующее:

$(".data").click(function(){
   //insert proper selector
)};

<div class="one">
<div class="data">text</div>
<div class="data">text</div>
<div class="data">text</div>
</div>

<div class="two">
<div class="data">text</div>
<div class="data">text</div>
<div class="data">text</div>
</div>

Я хочу, чтобы селектор делал следующее:

1). Выберите все div в родительском div (что означает, включая тот, который вы только что щелкнули).

2). НЕ выбирайте div внутри другого «родительского» div.

Я также понял, что было бы здорово, если бы вы могли фильтровать $(this) (div, на который вы нажали) из выбранных элементов. Считайте это бонусным вопросом :)

Я смотрел на это с разных сторон, но нашел только уродливое жесткое кодирование (для конкретного родителя). Я ценю любой вклад!


person Mattis    schedule 21.06.2010    source источник


Ответы (4)


.siblings() выбирает братьев и сестер того, по которому щелкнули.

.andSelf() добавляет тот, который был нажат, в набор.

Протестируйте пример: http://jsfiddle.net/sc23L/

$(".data").click(function(){
     // reference the one that was clicked
   var $clicked = $(this);

     // reference the entire set
   var $divs = $clicked.siblings().andSelf();
});
person user113716    schedule 21.06.2010
comment
Отлично, я даже не знал, что существуют братья и сестры(). Эта функция сделала именно то, что я хотел. Спасибо Пэт! - person Mattis; 21.06.2010
comment
.andSelf() это здорово, я всегда делал .add(это) - person Evan Carroll; 21.06.2010
comment
@Evan - Да, это просто оболочка для .add(), проходящей в предыдущем наборе. github.com/jquery/jquery/blob/master/src/ traversing.js#L126 - person user113716; 21.06.2010
comment
Да, я не уверен, нравится ли мне это для этого варианта использования, я думаю, что лучше буду придерживаться своего старого способа сделать это $(this).siblings().add(this) - person Evan Carroll; 21.06.2010

Может быть, вы ищете селектор .siblings()?

$('.data').click(function() {
   $(this).siblings('.data').andSelf()
)};

Предположим, вы хотите выбрать все элементы .data, которые являются родственными текущему выбранному элементу. .andSelf() добавляет текущий элемент к выбору.

person Tatu Ulmanen    schedule 21.06.2010

Селектор братьев и сестер не извлечет элемент div, на который нажали...

$('.data').click(function(){
   var $clickedDiv = $(this);
   var $allDivs    = $(this).parent().children('div');
});

Однако я не понимаю часть «фильтровать $ (это)», имея $clickedDiv, вы можете делать с ним все, что пожелаете...

person acm    schedule 21.06.2010
comment
Спасибо, это также лучший ответ, чем любой, который я нашел сам :) - person Mattis; 21.06.2010

Хорошо, для других ваших запросов

$(".data").click(function(){
   $(this); //code for the clicked element
   $(this).parent(); //code for parent of clicked element
   $(this).siblings(); //code for siblings
)};
person tcooc    schedule 21.06.2010