Выбор jQuery First Child без определенного класса

0

У меня есть страница с вложенными div, которые используются как вкладки Js/Jq. Когда вы нажимаете на родительскую вкладку, она запускает событие щелчка первого дочернего элемента под родительским элементом.

$('#topRow .pricing').click(function () {
    $('#secondRow .pricing').css('display', 'block');
    $('#secondRow .pricing div.tab:first-child').trigger('click');
});

Эта функциональность отлично работает, как есть. Тем не менее, мы добавляем функциональные возможности для эффективной блокировки вкладок, добавляя "заблокированный" класс динамически с помощью С#/linq, а затем на window.ready мы отвязываем все вкладки с классом "заблокирован" и окрашиваем их в серый цвет, чтобы указать, что они отключены.

Я пытаюсь изменить последнюю строку кода jQuery выше, чтобы щелкнуть первый ребенок, который НЕ имеет "заблокированный" класс.

    $('#secondRow .pricing div.tab:first-child').trigger('click');

Переведя это в plainspeak, он говорит: "Во второй строке запустите событие щелчка первой дочерней вкладки в группе" цена ". Я бы хотел, чтобы он сказал: "Во второй строке, запустите событие click на первой дочерней вкладке в группе" цена ", которая НЕ имеет класс" заблокирован ".

Я пробовал использовать:

    $('#secondRow .pricing div.tab:not(.locked):first-child').trigger('click');

Кажется правильным способом сделать это, но он все еще смотрит на первого ребенка и просто не запускает триггер ("щелчок"). Я что-то упускаю?

Вот html:

<div id="topRow">               
    <div class="pricing tab" runat="server" id="pricingTop">
        <div class="tabLeft">
            <div class="tabMain">
                Pricing
            </div>
        </div>
    </div>
</div>
<div id="secondRow">    
    <div id="pricingTabGroup" runat="server" class="pricing tabGroup" style="display:none">
        <div id="pricingProductA" runat="server" class="tab locked pricingProductA">
            <div class="tabLeft">
                <div class="tabMain">
                    ProductA
                </div>
            </div>
        </div>
        <div id="pricingProductB" runat="server" class="tab pricingProductB">
            <div class="tabLeft">
                <div class="tabMain">
                    ProductB
                </div>
            </div>
        </div>
    </div>
</div>

Класс "заблокирован" добавляется через С#:

protected void Page_Load(object sender, EventArgs e)
{
    bool ProductA = //some linq query

    if (!ProductA)
    {
        LockTab(pricingProductA);
    }

    protected void LockTab(HtmlGenericControl tab)
    {
        //Adds the "locked" class
        tab.Attributes.Add("class", "locked");
    }
}
  • 1
    Не могли бы вы опубликовать свой HTML, потому что запрос выглядит нормально
  • 0
    конечно, редактировать пост сейчас
Показать ещё 2 комментария
Теги:
jquery-1.4

1 ответ

2
Лучший ответ

Пытаться

$('#secondRow .pricing div.tab').not('.locked').children().first().trigger('click');

Ваш селектор отлично выглядит. Обычно рекомендуется свести к минимуму сложность селектора.

Также помните, что каждый раз, когда вы делаете селектор, jQuery пересекает dom, поэтому лучше сохранить возвращенные элементы для данного селектора в качестве переменной (для производительности), например:

var $tab_containers = $('#secondRow .pricing div.tab');

И затем используйте его несколько раз, как

$tab_containers.not('.locked').children().first().trigger('click');
  • 0
    Позвольте мне попробовать.
  • 0
    @RockiesMagicNumber Обратите внимание, что я только что отредактировал этот пост, чтобы отразить структуру DOM, которую вы добавили в свой пост.
Показать ещё 4 комментария

Ещё вопросы

Сообщество Overcoder
Наверх
Меню