jQuery Children vs Sibling (s) с $ (this) в качестве родительского элемента селектора - PullRequest
0 голосов
/ 04 февраля 2012

Хорошо, я подозреваю, что на моей странице будут десятки таких, поэтому я пытаюсь создать единую функцию для их правильной обработки, без необходимости перерабатывать код снова и снова и изменять идентификаторы или имена классов элементов, просто чтобы работа.

Мой HTML выглядит так:

<div class="button_select">
    <ul class="button_select_toggle">
        <li>
            <div class="button_select_text">Menu Text</div><div class="button_select_arrow">V</div>
        </li>
    </ul>
    <ul class="button_select_sub" rel="hidden">
        <li>Text</li>
        <li>Text</li>
        <li>Text</li>
        <li>Text</li>
    </ul>
</div>

И сейчас я пытаюсь получить именно UL с классом button_select_sub, чтобы я мог получить его значение rel. Что да, в некоторой степени это было бы легко, если бы это было единственное на любой странице, однако это будет на любой странице, которая знает, сколько раз. Поэтому я пытаюсь сделать универсальную функцию для их обработки. В любом случае моя последняя неудачная попытка была:

var selectstatus = $(this).siblings('.button_select_sub').attr('rel');
alert('status: '+selectstatus);

но в предупреждении я получаю "status: undefined", может быть, я неправильно использую братьев и сестер? может быть, есть альтернативный вариант. Также стоит упомянуть, что button_select_sub не всегда может быть последним UL в div, поэтому я не могу сделать: last тоже.

Я также пытался, children (). Find () .. и еще пару человек, я знаю, что это возможно, я просто не могу связать это вместе правильно.

Ответы [ 3 ]

5 голосов
/ 04 февраля 2012

Если $(this) относится к div "button_select", то я думаю, что вы должны использовать children, а не siblings.

var selectstatus = $(this).children('.button_select_sub').attr('rel');
alert('status: '+selectstatus);
1 голос
/ 04 февраля 2012

Если $(this) ссылается на .button-select, тогда siblings - это не то, что вы должны использовать.Вы должны использовать children или find, но children().find() здесь не имеет смысла.Кроме того, если есть много .button_select_sub, вы должны выполнить итерацию с each и извлечь каждое отдельное значение rel.

$('.button_select')
    .find('.button_select_sub')
    .each(function(){
        alert($(this).attr('rel'));
    });
0 голосов
/ 04 февраля 2012

Попробуйте это:

$(document).ready(function(){

    var selectstatus = "";

    $('.button_select').click(function(){

         selectstatus = $(this).children('ul.button_select_sub').attr('rel');
         alert('status: '+selectstatus);
    });

});

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

...