首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >用PHP和SimpleDOM或SimpleXML修改html列表

用PHP和SimpleDOM或SimpleXML修改html列表
EN

Stack Overflow用户
提问于 2011-03-04 02:01:43
回答 1查看 332关注 0票数 0

我有一个这样的结构的HTML片段:

代码语言:javascript
复制
<li class="level1 item3 parent">
    <a href="mainlink.html" class="level1 item3 parent">
        <span>
            <span class="title">Main title</span>
            <span class="sub">Subtitle</span>
        </span>
    </a>
    <ul class="level2">
        <li class="level2 item1 first">
            <a href="alink.html" class="level2 item1 first"><span>Title 1</span></a>
        </li>
        <li class="level2 item2">
            <a href="alink.html" class="level2 item2"><span>Title 2</span></a>
        </li>
        <li class="level2 item3">
            <a href="alink.html" class="level2 item3"><span>Title 3</span></a>
        </li>
        <li class="level2 item4 last">
            <a href="alink.html" class="level2 item4 last"><span>Title 4</span></a>
        </li>
    </ul>
</li>

我想把它改成这样:

代码语言:javascript
复制
<li class="level1 item3 parent">
    <a href="mainlink.html" class="level1 item3 parent">
        <span>
            <span class="title">Main title</span>
            <span class="sub">Subtitle</span>
        </span>
    </a>
    <ul class="level2">
        <li class="level2 item1 first">
            <a href="mainlink.html" class="level2 item1 first"><span>Main title</span></a>
        </li>
        <li class="level2 item1">
            <a href="alink.html" class="level2 item2"><span>Title 1</span></a>
        </li>
        <li class="level2 item2">
            <a href="alink.html" class="level2 item3"><span>Title 2</span></a>
        </li>
        <li class="level2 item3">
            <a href="alink.html" class="level2 item4"><span>Title 3</span></a>
        </li>
        <li class="level2 item4 last">
            <a href="alink.html" class="level2 item5 last"><span>Title 4</span></a>
        </li>
    </ul>
</li>

其主要思想是在主li元素内的ul的开头添加一个新项目,克隆该li元素的标签标题的一部分。我不知道如何使用SimpleXML或SimpleDOM http://code.google.com/p/simpledom/来完成此任务...有什么想法吗?

致以敬意,

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-03-04 04:12:42

新版本:

代码语言:javascript
复制
$doc = new DomDocument;
$doc->loadHTML($html);

$li = $doc->getElementsByTagName('li')->item(0)->cloneNode(true);

foreach($li->getElementsByTagName('ul') as $ul) {
    $ul->parentNode->removeChild($ul);
}

$span = $li->getElementsByTagName('span')->item(0);
$span->nodeValue = $li->getElementsByTagName('span')->item(1)->nodeValue;
foreach($span->getElementsByTagName('a') as $a) {
    $a->setAttribute('class', 'level2 item1 first');
}

$ul = $doc->getElementsByTagName('ul')->item(0);

$nodes = $ul->getElementsByTagName('a');
$node = $ul->childNodes->item(0);

$i = 2;
foreach($nodes as $n) {
    $n->setAttribute('class', 'level2 item' . $i);
    $i++;
}

$ul->insertBefore($li, $node);

$nodes->item(1)->parentNode->setAttribute('class', 'level2 item1');

echo $doc->saveHTML();

http://codepad.org/pIwwK1Z5

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5184600

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档