bootstrap只打开你点击的折叠

时间:2014-10-02 13:04:30

标签: javascript jquery css twitter-bootstrap

大家好我尝试使用botstraps“崩溃”元素来扰乱bbcode标签,它看起来很棒,但我确实有一个问题。

如果您在一个页面上有多个折叠并单击其中任何一个,它总是打开/关闭第一个。

有没有办法让它只打开/关闭你点击的那个?

现在它只是取代了这个:

"/\[spoiler\](.+?)\[\/spoiler\]/is"

有了这个:

'<div class="panel-group" id="accordion"><div class="panel panel-default"><div class="panel-heading"><h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Spoiler, click to open</a></h4></div><div id="collapseOne" class="panel-collapse collapse"><div class="panel-body">$1</div></div></div>'

是否有一种简单的方法可以让它只打开你点击的那个?

这是我现在的代码:

// Spoiler
$pattern = '/\[spoiler\](.+?)\[\/spoiler\]/is';

$replace = '<div class="panel-group" id="accordion"><div class="panel panel-default"><div class="panel-heading"><h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapseOne">Spoiler, click to open</a></h4></div><div id="collapseOne" class="panel-collapse collapse in"><div class="panel-body">$1</div></div></div>';

while(preg_match($pattern, $body))
{
    $body = preg_replace($pattern, $replace, $body);
}

2 个答案:

答案 0 :(得分:4)

如果你仔细观察,你可以在打开链接的href中看到"#collapseOne",在扰流板div中看到id="collapseOne"。如果用每个扰流器标签的相同替换字符串替换它,则每个标记将具有相同的href和Id。由于默认浏览器行为,它很可能会打开第一个

你应该保留一个变量来增加解扰器被解析的次数,并将其插入到链接的href和spoiler-div的id中。

如果我们查看您提供的代码,您可以这样做:

// Spoiler
$pattern = '/\[spoiler\](.+?)\[\/spoiler\]/is';
$spoilCount = 0;
while(preg_match($pattern, $body))
{
    $replace = '<div class="panel-group" id="accordion"><div class="panel panel-default"><div class="panel-heading"><h4 class="panel-title"><a data-toggle="collapse" data-parent="#accordion" href="#collapse'. $spoilCount . '">Spoiler, click to open</a></h4></div><div id="collapse' . $spoilCount . '" class="panel-collapse collapse in"><div class="panel-body">$1</div></div></div>';
    $body = preg_replace($pattern, $replace, $body, 1);
    $spoilCount++;
}

然而,最好使用回调函数(使用preg_replace_callback)来替换然后递增计数。这是(我认为)更好的表现。

答案 1 :(得分:1)

问题在于div id =“accordion”

的ID

文档中的ID必须是唯一的,因此不能多次出现。如果是这样的话,它通常会触发它找到的第一个。

您需要在类上应用accordion事件