【问题标题】:Bootstrap: Accordion within accordion, displaying dynamic contentBootstrap:手风琴内的手风琴,显示动态内容
【发布时间】:2013-01-20 21:40:22
【问题描述】:

我无法让我的引导手风琴工作。内容都是动态生成的,我希望手风琴嵌套在顶级父手风琴中 - 这是标记:

...
foreach($xml->Continent as $continent) {
   echo "<div class='accordion-group'><div class='accordion-header'><a class='accordion-toggle' data-toggle='collapse'>".$continent['Name']."</a><span>".$continent['Status']."</span></div>";
    foreach($continent->Country as $country) {
       echo "<div class='accordion-body collapse in'><div class='accordion-inner'><div class='accordion-group'><div class='accordion-header'><a class='accordion-toggle' data-toggle='collapse'>".$country['Name']."</a><span>".$country['Status']."</span></div>";
       foreach($country->City as $city) {
         echo "<div class='accordion-body collapse in'><div class='accordion-inner'>".$city['Name']."<span>".$city['Status']."</span></div></div>";
       }
       echo "</div></div></div>";
    }
    echo "</div>";
}
echo "</div>";
...

基本上.. 大陆都应该在默认状态下折叠。但是一旦你点击并展开一个大陆,它就会在里面列出国家。这些国家也应该扩展到显示城市,并停在那里。

我之前遇到过一种不同的方法,但它是非常脆弱的代码并且很大程度上依赖于标记,如果我的内容是动态生成的并且内容可以从 1 到许多。我真的只需要折叠功能才能工作,如果这意味着创建一个分配特定 id 的脚本,那么它也可以工作 - 我只是好奇最好的方法是什么。

【问题讨论】:

  • 确保您的
    标签是正确的。乍一看,我注意到echo "&lt;/div&gt;"; 在您的foreach() 之外。只是一种预感......
  • 啊,对不起。这是我没有包括所有代码的错。该 div 的开头在 Continent foreach 之前回显。
  • 好的...没问题。请参阅下面的答案。

标签: php javascript jquery twitter-bootstrap


【解决方案1】:

好的...问题如下:

  • 缺少data-parent 属性 - 例如data-parent="#accordion2"
  • 缺少href 属性 - 例如href="#collapseOne"
  • 缺少id 属性 - 例如id="collapseOne"

它可能不是 100% 完美,但是 [查看我的示例] 并查看 Twitter Bootstrap's "Collapse" documentation

  • 附加说明: 确保“in”类仅包含在城市中(例如class='accordion-body collapse in')。这使得这些节点一直在扩展。排除您最初想要折叠的节点(大陆和国家)的“in”类。

【讨论】:

  • 这太好了,谢谢。但是,由于它是动态生成的内容,处理这些 id 的最佳方法是什么?对于每个手风琴组,它们必须是不同的。我知道我必须编写一个脚本才能给每个组一个唯一的 ID,但我正在努力从哪里开始。
  • 您可以这样命名您的 id:collapse1 而不是 collapseOne。然后,在循环之前设置一个递增变量,例如$i = 1,并在循环内以$i++ 递增。然后,使用数字变量来构造 id 字符串,$collapse_id = "collapse".$i; 所以,它的结构是这样的:$i = 1; foreach($xml-&gt;Continent as $continent) { $collapse_id = "collapse".$i; echo "&lt;div id='".$collapse_id."'&gt;"; // and so on... $i++; }
  • Continent 和 Country 之间的问题呢?一个 Continent 中可以有多个 Country。因此,如果 Continent 的 id 为“collapse1”,它将为嵌套在其中的所有国家提供“collapse1”的 id。
  • 好的,解决这个问题很简单。我调整了输出,以便将 Country 包含在具有 id 的可折叠 div 中。现在我只需要让增量工作..目前只获得“collapse1”ID。
  • 是的,您需要在所有循环中重复该过程。由于已分配 $i,您需要将变量名称更改为 $i 以外的名称。 (例如 $j、$k 等)
猜你喜欢
相关资源
最近更新 更多
热门标签