Php 除去不必要的li
Php 除去不必要的li,php,html,Php,Html,echo$nav给出如下代码: <ul> <li class="someclass">sometext <ul> <li class="someclass">sometext</li> <li class="spacer"></li> <li class="someclass">sometext</l
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>
- sometext
- sometext
- sometext
- sometext
- sometext
- sometext
在每个子级ul
中,在每个正常列表项之后,都有带有class间隔符的列表项。
如何使用PHP删除主列表的子列表项
示例:
我正在搜索一个正则表达式,它应该只删除子
元素中的。
str\u replace
怎么样
$nav = str_replace('<li class="spacer"></li>','',$nav);
“容易”是相对的。这取决于几件事。如果需要,请修改生成$nav
的位置。尝试以下操作:
$nav = str_replace('<li class="spacer"></li>', '', $nav);
$nav=str_replace(“”,“$nav”);
使用preg\u replace替换li标签:
$new_nav = preg_replace('/<li class="spacer"></li>/', '', $nav);
echo $nav;
$new\u nav=preg\u replace('//,'','$nav);
echo$nav;
如果您无法访问$nav
变量来删除它(您可能会这样做),那么我只需要使用CSS来隐藏它,类似这样的方法应该可以:
li ul li.spacer {
display:none;
}
但是,如果您有权访问$nav
,请从代码中删除该间隔符li。简单
另外,在旁注上。将页面上的空元素作为“间隔符”在语义上是不好的。这应该通过CSS来处理,在页面上的其他元素上添加边距/填充,不要使用一类间隔符,如果这样做,那么您最好返回到到处使用零散的
标记来创建空间。有多种方法:
$var
字符串的内容,只需更改它str\u replace(',$var)
使用
substr\u replace
和strpos
代替str\u replace
,并在第一个垫片后指定偏移量
添加以下CSS
ul ul li.spacer { display: none; }
这是转换为XML(使用最新的PHP5.3版本和DOMDocument导出为HTML)。输出:
- sometext
- sometext
- sometext
- sometext
- sometext
-
- sometext
-
编辑创建$nav
的代码?这里没有足够的信息…我是不是遗漏了什么?你试过退格吗?不要删除它们,只是不要添加它们。这个问题很愚蠢。解决方案并不是通过掩盖问题的根源来“修复”的,而问题的根源正是额外的垫片产生的地方。从它们第一次输入代码的位置删除它们。@ParPar在ul
元素中不能有换行符。它们必须在li
中才能有效,而且,您不应该使用换行符或“特殊”lis来格式化布局。只应删除ul child li-child.Spaker。在通用ul中带有类“间隔符”的Li应该存在此代码删除了所有间隔符Li,应该只适用于孩子ulsee您在问题中添加的额外要求,我想说最简单的方法是使用JS,而不是使用PHPjs尝试此方法将导致跳转效应,当加载时,因此页面将被错误打开,然后它将被js修复,当它被加载时——“跳跃效应”。它不好,我不能直接编辑生成它的代码。所以方法是使用pre_replace,搜索正确的regex@steve你说过几次你不能,但我想我还没有看到一个解释来解释为什么你不能。这似乎是使用正则表达式的最快方法,有解决方案吗?我不支持regexp,因为每个li都有nbsp;用密码。因此显示:none不能修复IE7中的空白错误这些应该在子ul中删除
ul ul li.spacer { display: none; }
$xml = new SimpleXMLElement($nav);
$spacers = $xml->xpath('li//li[@class="spacer"]');
foreach($spacers as $i => $n) {
unset($spacers[$i][0]);
}
echo $xml->asXML();
<?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>