大家好我尝试使用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);
}
答案 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事件