【发布时间】:2021-09-07 23:57:27
【问题描述】:
需要根据子弹级别将li标签替换为不同的自定义标签,对于li level1保持原样,对于level2将li改为lii,对于level3将li改为liiii
例如对于下面的输入(我在下面的代码中只有 2 个项目符号级别作为示例)
<p><strong>Basics to Macros & VBA Code</strong></p>
<ul>
<li>Create a Macro MsgBox
<ul>
<li>test</li>
<li>test 1</li>
</ul>
</li>
<li>Workbook and Worksheet</li>
<li>Object Range</li>
<li>Object Variables</li>
<li>If Then Statement</li>
<li>Loop</li>
<li>Macro Errors</li>
<li>String Manipulation</li>
<li>Date and Time</li>
<li>Events</li>
<li>Array</li>
<li>Function and Sub</li>
<li>Application Object</li>
<li>Final Project</li>
</ul>
想要的输出
<p><strong>Basics to Macros & VBA Code</strong></p>
<ul>
<li>Create a Macro MsgBox
<ul>
<lii>test</lii>
<lii>test 1</lii>
</ul>
</li>
<li>Workbook and Worksheet</li>
<li>Object Range</li>
<li>Object Variables</li>
<li>If Then Statement</li>
<li>Loop</li>
<li>Macro Errors</li>
<li>String Manipulation</li>
<li>Date and Time</li>
<li>Events</li>
<li>Array</li>
<li>Function and Sub</li>
<li>Application Object</li>
<li>Final Project</li>
</ul>
如您所见,代码应该只更改 2 行(因为它是第 2 级)并保持 li 级别 1 原样
<lii>test</lii>
<lii>test 1</lii>
我在 php 中的代码
function clean($str)
{
$level = 0;
$str_temp = $str;
//$pos = strpos($str,"<ul>");
$str1 = "";
foreach(preg_split("/((\r?\n)|(\r\n?))/", $str_temp) as $line){
$line1 = "";
if(strpos($line,"<ul>")){
$level++;
}elseif(strpos($line,"</ul>")){
$level--;
}
if(level == 2){
$str1 .= str_replace("<li>", "<lii>", $line1);
}elseif(level == 3){
$str1 .= str_replace("<li>", "<liii>", $line1);
}else{
$str1 .= $line1;
}
}
$str1 = trim($str1);
return $str1;
}
更新
1- html 代码由 tinymce 创建并存储在 DB 中 2-我正在使用 FPDF 将 DB 输出为 PDF 文件 3-我正在使用 FPDF 的特定库来解析 html 标签以使每个标签具有特定的样式
与其提出问题,不如尽力提供帮助,如果没有什么可提供的,请保持原样。
【问题讨论】:
-
使用不同标签的原因是什么?因为
lii和liii是无效的HTML 标签。 -
如果您需要特定的样式,为什么不使用类?或者只是嵌套选择器
ul ul li? -
(我已经删除了问题中的 Javascript 和 CSS 标签,以帮助将其磨练给合适的受众。并赞成它,因为我认为这个问题没有任何问题。)
-
我也投了赞成票,因为现在有一个关于为什么需要实现这一点的描述,它作为一个问题要清楚得多。
-
你看过 PHP 的 DomDocument 吗?