日期:2014-05-17  浏览次数:20604 次

jquery 或者php如何检测dom元素有无闭合
比如我的dom较为复杂


<div class="i_curr_content" style="DISPLAY: block">  //这个div没有闭合
<h3><a class="green" href="">8种超级抗压食品,吃掉压力!</a></h3>

<p>&nbsp;</p>

<div style="page-break-after: always;"><span style="display:none">&nbsp;</span></div>

<p>众所周知,过大的压力会破坏我们的饮食习惯,2112132123</p>

<div style="page-break-after: always;"><span style="display:none">&nbsp;</span></div>

请问 php或者jquery如何能查出这样没有闭合的html元素,并补上这个闭合元素</div>?



------解决方案--------------------
用 DOMDocument::loadHTML 读入,在用 DOMDocument::saveHTML 写出
就自动补全了,但需要注意的是:html 文档中一定要有 <meta http-equiv="Content-Type" content="text/html; charset=???"> 标记,如果没有则自己加上
比如你的这段(假定是 gbk 的)
$s =<<< HTML
<div class="i_curr_content" style="DISPLAY: block">  //这个div没有闭合
<h3><a class="green" href="">8种超级抗压食品,吃掉压力!</a></h3>

<p> </p>

<div style="page-break-after: always;"><span style="display:none"> </span></div>

<p>众所周知,过大的压力会破坏我们的饮食习惯,2112132123</p>

<div style="page-break-after: always;"><span style="display:none"> </span></div>
HTML;
$s = '<meta http-equiv="Content-Type" content="text/html; charset=gbk">'.$s;

$doc = new DOMDocument;
$doc->loadHTML($s);
echo $doc->saveHTML();
将输出
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html><head><meta http-equiv="Content-Type" content="text/html; charset=gbk"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"></head><body>
<div class="i_curr_content" style="DISPLAY: block">  //这个div没有闭合
<h3><a class="green" href="">8种超级抗压食品,吃掉压力!</a></h3>