2014-10-02 61 views
0

大家好我试图使用botstraps“崩溃”元素的扰流bbcode标签,它看起来不错,但我确实有一个问题。bootstrap只能打开折叠,你点击

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

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

现在它只是替换此:

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

回答

4

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

您应该保留一个变量,用于增加扰流板已解析的次数,并将其插入链接的href和扰流板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)来代替,然后增加计数。这是(我会假设)更好的表现。

+0

我已经更新了我与我如何做它的代码应用手风琴事件,是否可以编辑您的答案告诉我怎么样? – NaughtySquid 2014-10-02 14:03:06

+0

查看我的最新编辑。这是你解决问题的方法之一 – 2014-10-02 14:12:15

+0

这似乎给我所有的“0”? – NaughtySquid 2014-10-02 14:14:10

1

的问题是与DIV ID =“手风琴”

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

您将需要一个类,而不是