【问题标题】:How can I replace an <a> tag with a <span> tag using a php if statement?如何使用 php if 语句将 <a> 标记替换为 <span> 标记?
【发布时间】:2016-07-20 16:22:01
【问题描述】:

所以我遇到了一个问题,在给定代码的情况下,我需要用span 标记替换li 标记内的a 标记以进行导航。

例如,我需要这样的东西:

<li>
  <a href="example.com">Link text</a>
</li>

看起来像这样:

<li>
  <span>Link Text</span>
</li>

使用php将a替换为span

谁能告诉我什么可以完成这个?我不能使用 javascript,只能使用 php。

要明确的是,这是我对完成此任务所需要做的事情的理解。如果有人有更好的方法来做到这一点,我将不胜感激。谢谢。

这是我目前拥有的

<ul class="page-content-nav">
  <li>
    <a class="nav-selected" href="#">Programs</a>
  </li>
  <li>
    <a class="" href="#">Programs</a>
  </li>
</ul>

所以我需要将其中的&lt;a&gt; 替换为&lt;span&gt;,当它获得“nav-selected”类时,这只发生在我在该特定页面上时。

希望这可以帮助澄清

【问题讨论】:

  • 所以给定一些条件,你想用span标签改变a标签吗?
  • 在某种程度上我相信是的。也许更多的解释会有所帮助。我正在尝试检查在导航中选择特定链接时是否会获得一个名为“nav-selected”的特定类,该类会样式/突出显示该链接以显示您所在的当前页面。因此,选择链接时,我希望标记删除并用跨度替换,以便无法再单击该特定链接。我可以尝试更好地解释它,但希望这会有所帮助。
  • 在下面查看我的答案
  • 到目前为止你尝试过什么?到底出了什么问题?你有任何错误吗?这些错误是什么?你试图做什么来修复这些错误?当你这样做的时候发生了什么?请记住在提出问题时包括这些内容。请遵循本指南以确保您的问题是高质量的:stackoverflow.com/help/how-to-ask
  • 好的。我将确保在将来遵循该指南使我的问题更加清晰。感谢您的帮助!

标签: php html replace tags


【解决方案1】:

如果我正确理解了您的问题,那么您正在尝试在满足某些条件时将 &lt;a&gt; 标记替换为 &lt;span&gt; 标记。然后您解释说,条件将是用户单击链接时。如果这是正确的,你可以这样做:

<li>

<?php

//variable storing the class name
$className = "nav-selected";

// do all of the DOMElement operations here to determine what the class is. For this, look at the link provide in the comments
$actualClassName = "className";

if($className == $actualClassName) 
?> 
<span>Link Text</span>

<?php 
else if($someCondition == false)
?> 
<a href="example.com">Link text</a>

</li>

【讨论】:

【解决方案2】:

我已经创建了一个可以做到这一点的课程:

class LiBuilder{

    public function buildListElement($text,$href=null){
        $li_inner_html = $this->buildListElementInnerHtml($text,$href);
        $li = $this->wrapInLi($li_inner_html);
        return $li;
    }

    private function buildListElementInnerHtml($text,$href){
        if($href)
            $li_inner_html = $this->buildAnchorElement($text,$href);
        else
            $li_inner_html = $this->buildSpanElement($text);
        return $li_inner_html;
    }

    private function wrapInLi($inner_html){
        return "<li>{$inner_html}</li>";
    }

    private function buildAnchorElement($href,$text){
        return "<a href=\"{$href}\">{$text}</a>";
    }

    private function buildSpanElement($text){
        return "<span>{$text}</span>";
    }

}

然后,你可以这样使用它:

$li_builder = new LiBuilder();
$li_1 = $li_builder->buildListElement('Here is a magic element without link');
$li_2 = $li_builder->buildListElement(
    'Another magic element but with link this time.',
    'http://www.stackoverflow.com'
);
echo $li_1, '<br />', $li_2;

所以,只需复制/粘贴我的 LiBuilder 类,然后调用它,然后调用方法 buildListElement。

它可能被过度设计,但至少它是可测试的并且相对干净。不要忘记检查 XSS。

【讨论】:

    【解决方案3】:

    方法1

    如果您的目标是更改属性锚点 - 移除悬停和点击,您可以使用以下内容:

    <style type="text/css">
    .nav-selected{
        cursor:default; 
        pointer-events: none;
    }
    </style>
    
    <ul class="page-content-nav">
      <li>
        <a class="nav-selected" href="#">Programs</a>
      </li>
      <li>
        <a class="" href="#">Programs</a>
      </li>
    </ul>
    

    方法二

    以下不是实际代码,只是一个想法。

    <?php
    
    echo '<ul class="page-content-nav">';
    while/for(Loop through your array or mysql)
    {
        $Link = $array['link']; //eg: 'http://something.page.php'
        $Text = $array['menu_name']; //eg: programs
        $Id   = $array['id'];
    
        if ($Id == $current_page_id)
        {
        echo '
        <li>
            <span class="nav-selected" href="#">'.$Text.'</span>
        </li>
        ';
        }
        else
        {
        echo '
        <li>
            <a class="" href="'.$Link.'">'.$Text.'</a>
        </li>
        ';
        }
    
    }
    echo '</ul>';
    ?>
    

    【讨论】:

    • 我已经完成了 foreach 循环以在我当前的代码中创建某些内容。例如,如果我要说,“每次 $Id 等于 $current_page_id 并且如果当前页面包含 nav-selected 类,那么像您上面所做的那样回显一个跨度?我已经完成了第一种方法并且能够以更简单的方式获得我想要的结果。但不幸的是,对于这个问题,我需要使用 php 而不是 css 来实现相同的效果。但总而言之,第一种方法给了我想要的确切结果,但只是不是按照需要完成的方式。
    • 你的导航是使用php动态生成还是静态导航
    猜你喜欢
    • 2013-05-02
    • 2019-08-23
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多