【问题标题】:Selecting jQuery First Child without a specific class选择没有特定类的 jQuery First Child
【发布时间】:2014-05-31 20:15:55
【问题描述】:

我有一个嵌套 div 用作 Js/Jq 选项卡的页面。当您点击父标签时,它会触发父标签下方第一个子标签的点击事件。

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

此功能按原样运行良好。但是,我们通过 c#/linq 动态添加“锁定”类,然后在 window.ready 上使用“锁定”类解除所有选项卡的绑定,并将它们涂成灰色以表示它们被禁用。

我正在尝试修改上面 jQuery 代码的最后一行,以单击第一个没有“锁定”类的子项。

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

将其翻译成通俗的说法,就是“在第二行,触发‘定价’组中第一个子标签的点击事件”。我想说“在第二行,触发‘定价’组中没有‘锁定’类的第一个子选项卡的点击事件”。

我尝试过使用:

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

这似乎是正确的方法,但它仍然会查看第一个孩子并且不会触发触发器('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>

“锁定”类是通过C#添加的:

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");
    }
}

【问题讨论】:

  • 能否请您发布您的 HTML,因为查询似乎很好
  • 当然,现在编辑帖子
  • 一个疯狂的猜测,但尝试 $('#secondRow .pricing:not(div.tab.locked) div.tab:first-child')
  • 下面的 Thad Blankenship 已经解决了这个问题!也非常感谢您提供帮助!

标签: c# javascript html asp.net jquery-1.4


【解决方案1】:

试试

$('#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');

【讨论】:

  • 让我试一试。
  • @RockiesMagicNumber 请注意,我刚刚编辑了这篇帖子以反映您添加到帖子中的 DOM 结构。
  • 让我刷新一下,但它正在工作。多陪我一会儿。
  • 工作就像一个魅力。到目前为止,我的 jQuery 很差(我在 TSQL 和 C# 之间工作得最好,直到最近,jQ/js 的功能有点“好”),所以如果你不介意,我做错了什么这里?另外,感谢您在此处发布“var selector”存储行。我现在可以将此 js 页面排队等待重构。
  • @RockiesMagicNumber 老实说,我不确定。看起来你的选择器应该和我的一样。我假设有多个自定义选择器(以冒号为前缀的选择器)存在一些问题。
猜你喜欢
  • 2014-05-16
  • 2014-11-21
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-01-23
  • 2015-09-21
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多