echo $nav
提供如下代码:
<ul>
<li class="someclass">sometext
<ul>
<li class="someclass">sometext</li>
<li class="spacer"></li>
<li class="someclass">sometext</li>
<li class="spacer"></li>
<li class="someclass">sometext</li>
<li class="spacer"></li>
<li class="someclass">sometext</li>
<li class="spacer"></li>
</ul>
</li>
<li class="spacer"></li>
<li class="someclass">sometext</li>
<li class="spacer"></li>
</ul>
在每个正常列表项之后,每个子spacer
内都有类ul
的列表项。
如何使用PHP删除作为主列表的孙子的spacer
列表项?
示例: <ul> <li> <ul> <li class="spacer">
我正在搜索正则表达式,该表达式只会在子<li class="spacer"></li>
元素中删除<ul>
。
答案 0 :(得分:1)
如果您无法访问$nav
变量来删除它(您可能会这样做),那么我只是使用CSS来隐藏它,这样的事情应该有效:
li ul li.spacer {
display:none;
}
但是,如果您有权访问$nav
- 请从代码中删除spacer li。 Simples
另外,请注意。在页面上有像空格一样的空元素在语义上是坏的。这应该通过CSS处理,在页面上的其他元素上添加边距/填充,不要使用一类spacer,如果你这样做,那么你可以回到每个地方使用流浪<br />
标签来创建空格
答案 1 :(得分:1)
$xml = new SimpleXMLElement($nav);
$spacers = $xml->xpath('li//li[@class="spacer"]');
foreach($spacers as $i => $n) {
unset($spacers[$i][0]);
}
echo $xml->asXML();
这是转换为XML(使用最新的PHP 5.3版本和DOMDocument导出为HTML)。输出:
<?xml version="1.0"?>
<ul>
<li class="someclass">sometext
<ul>
<li class="someclass">sometext</li>
<li class="someclass">sometext</li>
<li class="someclass">sometext</li>
<li class="someclass">sometext</li>
</ul>
</li>
<li class="spacer"/>
<li class="someclass">sometext</li>
<li class="spacer"/>
</ul>
答案 2 :(得分:0)
str_replace
怎么样?
$nav = str_replace('<li class="spacer"></li>','',$nav);
edited code below
根据新要求,此代码有效。我知道它的hacky和马虎但它的确有效:
$temp = explode("\n",$nav);
for ($i=0;$i<count($temp);$i++) {
if (strstr($temp[$i],"<ul>")) {
$nested_ul = 1;
}
if (strstr($temp[$i],"</ul>")) {
$nested_ul = 0;
}
if ($nested_ul==0) {
if (!strstr($temp[$i],"spacer")) {
$new_nav .= $temp[$i]."\n";
}
} else {
$new_nav .= $temp[$i]."\n";
}
}
echo $new_nav;
答案 3 :(得分:0)
“轻松”是相对的。这取决于一些事情。如果需要,请修改生成$nav
的位置。
答案 4 :(得分:0)
试试这个:
$nav = str_replace('<li class="spacer"></li>', '', $nav);
答案 5 :(得分:0)
使用preg_replace替换li标签:
$new_nav = preg_replace('/<li class="spacer"></li>/', '', $nav);
echo $nav;
答案 6 :(得分:0)
有多种方式:
不要创建它。如果你不创造你不想要的东西会更容易。它将更容易维护。因此,如果您对$var
字符串中生成的内容有任何控制权,请更改它。
只需将其替换为:str_replace('<li class="spacer"></li>', $var)
。
使用一些HTML解析器并删除节点。
使用JavaScript在客户端删除<li class="spacer"></li>
。
答案 7 :(得分:0)
使用substr_replace
和strpos
代替str_replace
,并在第一个间隔符后面指定偏移量。
答案 8 :(得分:0)
添加以下CSS
ul ul li.spacer { display: none; }