如何替换<;a>;带有<;span>;使用php-if语句标记


How can I replace an <a> tag with a <span> tag using a php if statement?

因此,我遇到了一个问题,在给定的代码中,我需要用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>

因此,当<a>获得类"nav selected"时,我需要将其替换为<span>,只有当我在特定页面上时才会发生这种情况。

希望这能帮助澄清

方法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>

方法2

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

<?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>';
?>

我制作了一个这样的类:

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。

如果我正确理解您的问题,那么当满足某些条件时,您正试图用<span>标记替换<a>标记。然后你解释说,条件是当用户点击链接时。如果这是正确的,你可以这样做:

<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>