作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在使用 AngleSharp 解析文档。我有一个文本节点 (NodeName: "#text"),我想在其中插入一些 HTML。我当然可以将 NodeValue 重置为我想要的任何值,但它仍然是一个文本节点,因此所有括号都被转义了。
我如何获取文本节点的字符串值,向其中注入(inject)一些 HTML,然后使用该 HTML 代替原始文本节点的已解析 DOM 表示?
最佳答案
我猜你想要的是用多个节点替换单个文本节点。
例如<div>foo</div>
,即,
+ root
+ textnode
成为
+ root
+ textnode (1)
+ element
+ textnode (2)
这可以<div>f<b>o</b>o</div>
.我能想到的最简单的方法就是更换节点。
var source = @"<div>foo</div>";
var parser = new HtmlParser();
var document = parser.Parse(source);
var div = document.QuerySelector("div");
div.InnerHtml = div.InnerHtml.Replace("foo", "f<b>o</b>o");
现在您可以争辩说仅仅替换文本可能不是您想要的。您可能已经有了要插入的元素。因此,更好(但更复杂)的方法是拆分文本节点并插入剩余内容。
var source = @"<div>foo</div>";
var parser = new HtmlParser();
var document = parser.Parse(source);
var div = document.QuerySelector("div");
var text = div.TextContent;
div.RemoveChild(div.FirstChild); // assuming there is only one child
var bold = document.CreateElement("b");
bold.TextContent = text.Substring(1, 1); //o
div.Append(
document.CreateTextNode(text.Substring(0, 1)), //f
bold,
document.CreateTextNode(text.Substring(2, 1)));//o
根据您的用例,可能会有更简单的解决方案。
关于anglesharp - 如何将 HTML 插入 AngleSharp 中的文本节点?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33047239/
我是一名优秀的程序员,十分优秀!