2013-08-27 37 views
-1

我如何转换这种结构转换一个div为跨度的DOMDocument

<div class="parent"> 
    <div class="someclass"> 
     <b>some HTML</b> 
     ... 
    </div> 
    <div class="someclass"> 
     <b>some HTML</b> 
     ... 
    </div> 
</div> 

<div class="parent"> 
    <span class="someclass"> 
     <b>some HTML</b> 
     ... 
    </span> 
    <span class="someclass"> 
     <b>some HTML</b> 
     ... 
    </span> 
</div> 

我拥有有效的HTML标记,但因为还有很多其他的div我做不到preg_replace。

我喜欢一个服务器端解决方案(PHP)

回答

1

下面是使用DOM DocumentDOM ElementDOM Node以取代跨度您的div的PHP例子。不管它是否是最有效的方式...我不完全确定。从echo

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
<html><body><span id="someid">some HTML...</span></body></html> 

PHP代码

$Dom = new DOMDocument(); 
$Dom->loadHTML('<div id="someid"><b>some HTML</b>...</div>'); 

$Ele = $Dom->getElementById('someid'); 
$New = $Dom->createElement('span', $Ele->nodeValue); 
$New->setAttribute('id', $Ele->getAttribute('id')); 
$Parent = $Ele->parentNode; 
$Parent->removeChild($Ele); 
$Parent->appendChild($New); 

echo $Dom->saveHTML(); 

PHP响应你也许可以使用DOM Fragment忽略所有的HTML,身体和DOCTYPE标签。

+0

我想与几个元素的和带班巫不起作用:\t \t \t $的XPath =新DOMXpath($ DOC); \t $ modulecontainer = $ xpath-> query(“// */div [@ class ='myclass']”); \t \t \t 的foreach($ modulecontainer为$容器){ \t \t $新= $ doc->的createElement( '跨度',$容器 - >的nodeValue); \t \t $ parent = $ container-> parentNode; \t \t $ parent-> removeChild($ container); \t \t $ parent-> appendChild($ new); \t \t \t \t} – Xaver

+0

它也不保存子节点中的html – Xaver

-2
<div id="container"> 
    <div id="test" style="color:blue;">test</div> 
</div> 
<script> 
var container = document.getElementById("container"); 
var html = container.innerHTML.replace(new RegExp("<div","g"),"<span"); 
html = html.replace(new RegExp("<\/div","g"),"</span"); 
container.innerHTML = html; 
</script> 
+0

不要在HTML中使用正则表达式,-1 –