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