使用 CsQuery 将 DOM 元素替换为其他元素

本文关键字:元素 替换 其他 DOM CsQuery 使用 | 更新日期: 2023-09-27 18:37:20

A 有一个包含链接列表的 HTML 文档:

  <div class="toc">
     <ul class="content_list">
        <li><a href="...">Chapter 1</a></li>
        <li><a href="...">Chapter 2</a></li>
        <li><a href="...">Chapter 3</a></li>

有没有办法(使用 CsQuery)在保留文本的同时删除锚标记或用不同的元素(例如<span>)替换它们?

结果应如下所示:

  <div class="toc">
     <ul class="content_list">
        <li>Chapter 1</li>

或者像这样:

  <div class="toc">
     <ul class="content_list">
        <li><span>Chapter 1</span></li>

使用 CsQuery 将 DOM 元素替换为其他元素

var cq = new CsQuery.CQ(@"<div class=""toc""><ul class=""content_list"">
        <li><a href=""..."">Chapter 1</a></li>
        <li><a href=""..."">Chapter 2</a></li>
        <li><a href=""..."">Chapter 3</a></li>
</ul></div>");
cq[".toc > .content_list > li > a"]
    .Select(x => x.Cq())
    .ToList().ForEach(x => x.ReplaceWith(x.Text()));
    //or with a span wrapper
    //.ToList().ForEach(x => x.ReplaceWith(new CsQuery.CQ("<span/>").Text(x.Text())));
cq.Html().Dump();

这产生:

<ul class="content_list">
    <li>Chapter 1</li>
    <li>Chapter 2</li>
    <li>Chapter 3</li>
</ul>