【问题标题】:Hide / Show divs from url string in php在php中隐藏/显示来自url字符串的div
【发布时间】:2010-11-23 14:01:31
【问题描述】:

一个完整的初学者问题。 我在一个页面(page2.php)上有大量的 div(>80),我想做的是打开 page1.php,单击一个链接以打开 page2.php 并仅显示其中一个 div,具体取决于点击了哪个链接。

通过向 div 添加 if else,我有一个基本的工作版本。到目前为止,我只在其中的 5 个 div 上完成了此操作,并且它有效,但它似乎也是一种相当不善言辞的做事方式。

第 1 页:

 <a href="page2.php?id=r0101">this is a link</a>

第 2 页:

<?php 
$divID = $_GET['id'];
?>

<div id="r0101" <? if($divID == r0101): ?>class="show"<? else: ?>class="hidden"<? endif; ?> >

然后应用一个 css 类来隐藏或显示 div。 是否有可能在页面顶部有一个函数或任何东西,从 url 中获取 id,发现还有一个具有该 id 的 div,显示它并隐藏所有其他的?这可能是一件容易的事情,但它让我很难过。

非常感谢任何帮助。 谢谢。

【问题讨论】:

  • 使用 jquery / javascript 会更容易和更简单,并且您可以将所有内容保存在一个页面上。
  • 会是,但我不能依赖 javascript 来解决这个问题,不幸的是,这是一个非常严格的环境。

标签: php url show-hide


【解决方案1】:

更不用说 div 和 css 工作了(当您中继以隐藏/显示 div 时)。 您不仅可以生成标记,还可以生成 css 样式表。使用类似的(放在 你的头部部分的结尾)。让浏览器为您完成工作;)

<style type="text/css">
    div {
        display: none;
    }

    div#<?php echo $_GET['id']; ?>:{
        display: block;
    }
</style>

【讨论】:

  • 这太棒了!非常简单有效。感谢您对此进行排序! :) 并感谢所有其他回复。
  • 这是个好主意!但是,我开始认为 OP 的主要问题不是为每个 div 编码 if。手动编写 divs>80 内容似乎很奇怪。
  • 这很无聊,而且很奇怪,但是没有可用的数据库,并且可能不允许使用 javascript。我别无选择,只能用老式的方式写出来。
【解决方案2】:
$divs = array('r0101', 'r0102', 'r0103');
$divID = $_GET['id'];
foreach($divs as $div)
{
    echo '<div id="'.$div.'" class="';
    if ($div == $divID)
    {
      echo 'show';
    }
    else
    {
        echo 'hidden';
    }
    echo '">';
}

假设我已正确阅读问题,您有一组 div(r0101、r0102 等)并希望根据您所在的页面仅显示其中一个。上面的代码创建了这些 div 的数组,循环并创建了 div。如果 div 与页面 url 中的 div 匹配,则 div 的类为“显示”,否则为“隐藏”。

【讨论】:

  • 好的,我想我遵循这个,但我在每个 div 中都有特定的独特内容,所以我不确定我是否可以使用它,可以吗?它将创建所有 div 但不允许所有内容? (内容很多)
  • 内容从何而来?您可以将其包含在数组中。
  • 我必须从 InDesign 文档中全部复制,这些文档长达 20 张 A4 页面,我认为将这些全部放入一个数组中与将其放在页面上一样多?
  • 我会选择 Eineki 上面的 css 解决方案,看起来更优雅。
【解决方案3】:

首先,您应该考虑一种使您的 div 动态打印的方法。比如:

<?php
for($i = 1; $i <= 80; $i++):
?>
<div id="r<?php print $i; ?>">div contents</div>
<?php
endfor;
?>

此外,如果您找到了执行上述操作的方法,您还可以执行以下操作:

<?php
for($i = 1; $i <= 80; $i++):
    if($i == $_GET['id']){
        $class = 'show';
    } else {
        $class = 'hidden';
    }
?>
<div id="r<?php print $i; ?>" class="<?php print $class; ?>">div contents</div>
<?php
endfor;
?>

<?php
for($i = 1; $i <= 80; $i++):
    $class = ($i == $_GET['id']) ? 'show' : 'hidden';
?>
<div id="r<?php print $i; ?>" class="<?php print $class; ?>">div contents</div>
<?php
endfor;
?>

这完全一样,但是(使用ternary operator)少了几行并且(有些人认为)它降低了可读性。

【讨论】:

  • 感谢您的回复。有没有办法用循环外的打印命令移动 div?与此处发布的其他解决方案一样,我需要在每个 div 中放置独特的自定义内容,并且有很多。
  • 您的内容来自哪里?如果您要写下所有内容(这很奇怪!!!),您也可以为所有 div 写 if 条件...否则我会建议类似 ` $contents = array(0=>'content div id 0', 1=> 'content div id 1');` 并在上面的代码中将div contents 替换为&lt;?php print $contents[$i]; ?&gt;
【解决方案4】:

如果你想让你的下载速度更快,你应该只输出你想显示的 div。你可以这样做:

 $divs = array('r0101', 'r0102', 'r0103');
$divID = $_GET['id'];
foreach($divs as $div)
{
    if($div == $divID){ echo '<div> /* CONTENT HERE */ </div> };
}

希望这会有所帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2023-03-08
    • 1970-01-01
    • 2015-12-21
    • 2012-11-08
    • 2017-09-15
    相关资源
    最近更新 更多