PHP删除所有div与class =“myclass”除了第一个+添加另一个div而不是其他div

时间:2012-01-05 13:30:26

标签: php

我有

的$ content
<div class="slidesWrap">
   <div class="slidesСontainer">
      <div class="myclass"> 
        ...
      </div>
      <div class="myclass">
        ...
      </div>
      ...
      ...
      <div class="myclass">
        ...
      </div>
   </div>
   <div class="nav">
      ...
   </div>
</div>
some other text here, <p></p> bla-bla-bla

我想通过PHP删除所有带有class =“myclass”的div除了第一个div,并添加另一个div而不是其他div,结果是:

<div class="slidesWrap">
   <div class="slidesСontainer">
      <div class="myclass"> 
        ...
      </div>
      <div>Check all divs <a href="myurl">here</a></div>
   </div>
   <div class="nav">
      ...
   </div>
</div>
some other text here, <p></p> bla-bla-bla

如果有人能给我一个解决方案,我将不胜感激。

UDATE2:

一些类似的问题here 从那里我想出了以下测试代码:

$content = '<div class="slidesWrap">
   <div class="slidesСontainer">
      <div class="myclass">
      </div>
      <div class="myclass">
      </div>
      <div class="myclass">
      </div>
   </div>
   <div class="nav">
  </div>
  </div>
 some other text here, <p></p> bla-bla-bla';

$dom = new DOMDocument();
$dom->loadHtml($content);

$xpath = new DOMXPath($dom);
foreach ($xpath->query('//*[@class="myClass" and position()>1]') as $liNode) {
    $liNode->parentNode->removeChild($liNode); 
}

echo $dom->saveXml($dom->documentElement);

我可以测试它的任何想法吗?

3 个答案:

答案 0 :(得分:1)

以下是您要查找的内容(与您的编辑类似,但会删除添加的html标记):

$doc = new DOMDocument();
$doc->loadHTML($content);

$xp = new DOMXpath($doc);
$elements = $xp->query("//div[@class='myclass']");

if($elements->length > 1)
{
    $newElem = $doc->createElement("div");
    $newElem->appendChild($doc->createTextNode("Check all divs "));
    $newElemLink = $newElem->appendChild($doc->createElement("a"));
    $newElemLink->setAttribute("href", "myurl");
    $newElemLink->appendChild($doc->createTextNode("here"));

    $elements->item(1)->parentNode->replaceChild($newElem, $elements->item(1));     

    for($i = $elements->length - 1; $i > 1 ; $i--)
    {
        $elements->item($i)->parentNode->removeChild($elements->item($i));
    }
}

echo $doc->saveXML($doc->getElementsByTagName('div')->item(0));

答案 1 :(得分:-1)

$var = ':not(.myClass:eq(1))';   
$var.removeClass("myClass");
$var.addClass("some_other_Class");

答案 2 :(得分:-2)

如果我找到了你,你会得到一个名为$content的字符串,其中包含所有内容 这不是我猜的最佳解决方案,但这是我的尝试(对我来说很好):

if( substr_count($content, '<div class="myclass') > 1 ) {
    $parts = explode('<div class="myclass',$content);
    echo '<div class="myclass'.$parts[1];
    echo '<div>Check all divs <a href="myurl">here</a></div>';
}
else {echo $content;}