【问题标题】:jQuery how to add class to a parent div which has a 3rd level child div with a specific class namejQuery如何将类添加到具有特定类名的第三级子div的父div
【发布时间】:2011-06-05 13:29:30
【问题描述】:

您好朋友,我在为我的几个 div 添加特殊类时遇到问题。我的布局是这样的。

<div class="container">
    <div class="grid-6 push-3 equal" style="height: 999px;">
        <div class="block">
            <div id="mainbody"> 
                <!-- Body content here --> 
            </div>
        </div>
    </div>

    <div class="grid-2 equal" style="height: 999px;">
        <div class="block">
            <div id="sidebar-a"> 
                <!-- Sidebar-a content here --> 
            </div>
        </div>
    </div>

    <div class="grid-2 equal" style="height: 999px;">
        <div class="block">
            <div id="sidebar-b"> 
                <!-- Sidebar-b content here --> 
            </div>
        </div>
    </div>

    <div class="grid-2 equal" style="height: 999px;">
        <div class="block">
            <div id="sidebar-c"> 
                <!-- Sidebar-c content here --> 
            </div>
        </div>
    </div>
</div>

我想通过 CSS 为我的每个侧边栏添加不同的背景颜色,当我编写如下代码时:

#mainbody { background : #fff; }
#sidebar-a { background : #eee; }
#sidebar-b { background : #ddd; }
#sidebar-c { background : #ccc; }

它仅将背景应用于该特定类,但该特定类的高度不相等。我实际上需要申请这个&lt;div class="grid-2 equal" style="height: 999px;"&gt; div。

现在的问题是在这个

&lt;div class="grid-6 push-3 equal" style="height: 999px;"&gt;&lt;div class="grid-2 equal" style="height: 999px;"&gt;

类名grid-6grid-2 是由我的960 Grid System 的PHP 动态生成的,style="height: 999px; 也是由Equal-Columns 的jQuery 脚本生成的。

我想要的是添加一个像这样的唯一类名......寻找一个div 和一个.equalclass,它有一个child div 和一个class.block @ 并且还具有child divIDsidebar-a

如果为真,则将 .sidebar-aclass 添加到具有 .equalclass 的 maindiv

所以结果看起来像这样:

<div class="grid-6 equal push-3 mainbody" style="height: 999px;">
<div class="grid-2 equal sidebar-a" style="height: 999px;">
<div class="grid-2 equal sidebar-b" style="height: 999px;">
<div class="grid-2 equal sidebar-c" style="height: 999px;">

然后我就可以这样设置样式了:

.mainbody { background : #fff; }
.sidebar-a { background : #eee; }
.sidebar-b { background : #ddd; }
.sidebar-c { background : #ccc; }

因此我想既然我在我的模板中使用 jQuery,为什么不使用它来处理这个问题。如果您有其他想法,请随时提出更好的方法。

【问题讨论】:

  • 经典错误一:重复的 ID 属性。您的文档无效,在您解决该问题之前,JavaScript 会表现得很有趣和/或失败……除非那只是一个错字! (sidebar-b 列出了两次)
  • 哦,是的,这是一个错字。对于那个很抱歉。感谢您指出。

标签: php jquery class append


【解决方案1】:

您可以在标准的 jQuery 选择器中执行您的选择逻辑,然后对于每个侧边栏,您会在 DOM 树上找到第一个带有 equal 类的 div,并使用每个侧边栏的 id 的名称将一个类附加到它上面:

$('div.equal div.block div[id^="sidebar"]').each(function() {
    $(this).closest('div.equal').addClass(this.id);
});

【讨论】:

  • 绝对是这样做的方法。 +1 如果我没有用完选票。
  • 您好,感谢您的代码,但 nop 不起作用。我是这样用的..... $(document).ready(function() { $('div.equal div.block div[id^="sidebar"]').each(function() { $(this ).closest('equal').addClass(this.id); }); });我错过了什么吗?
  • 抱歉,我是编程新手。我刚开始学习。请帮忙。
  • 这是一个DEMO,它显示它正在工作,它在执行我的答案中的代码后提醒每个元素div.equal 的类名。你会看到sidebar-a等类都在里面。
  • @Vikram:你有.closest('equal')。您需要.closest('.equal')(注意equal 之前的.,因为它表示类名)。或者按照@Marcus 给出的示例:.closest('div.equal')
猜你喜欢
  • 1970-01-01
  • 2022-12-03
  • 1970-01-01
  • 2012-04-06
  • 1970-01-01
  • 2022-07-19
  • 2014-07-31
  • 2019-10-11
  • 2015-08-15
相关资源
最近更新 更多