DocumentFragment
sealed class DocumentFragment : Node, IDocumentFragment, INode, IEventTarget, IMarkupFormattable, IParentNode, INonElementParentNode
Represents a document fragment.
using AngleSharp.Dom.Collections;
using AngleSharp.Dom.Html;
using AngleSharp.Extensions;
using AngleSharp.Html;
using AngleSharp.Parser.Html;
using System.IO;
using System.Linq;
using System.Text;
namespace AngleSharp.Dom
{
internal sealed class DocumentFragment : Node, IDocumentFragment, INode, IEventTarget, IMarkupFormattable, IParentNode, INonElementParentNode
{
private HtmlCollection<IElement> _elements;
public int ChildElementCount => base.ChildNodes.OfType<Element>().Count();
public IHtmlCollection<IElement> Children => _elements ?? (_elements = new HtmlCollection<IElement>(this, false, null));
public IElement FirstElementChild {
get {
NodeList childNodes = base.ChildNodes;
int length = childNodes.Length;
for (int i = 0; i < length; i++) {
IElement element = childNodes[i] as IElement;
if (element != null)
return element;
}
return null;
}
}
public IElement LastElementChild {
get {
NodeList childNodes = base.ChildNodes;
for (int num = childNodes.Length - 1; num >= 0; num--) {
IElement element = childNodes[num] as IElement;
if (element != null)
return element;
}
return null;
}
}
public override string TextContent {
get {
StringBuilder stringBuilder = Pool.NewStringBuilder();
foreach (IText item in this.GetDescendants().OfType<IText>()) {
stringBuilder.Append(item.Data);
}
return stringBuilder.ToPool();
}
set {
TextNode node = (!string.IsNullOrEmpty(value)) ? new TextNode(base.Owner, value) : null;
ReplaceAll(node, false);
}
}
internal DocumentFragment(Document owner)
: base(owner, "#document-fragment", NodeType.DocumentFragment, NodeFlags.None)
{
}
internal DocumentFragment(Element context, string html)
: this(context.Owner)
{
TextSource source = new TextSource(html);
HtmlDomBuilder htmlDomBuilder = new HtmlDomBuilder(new HtmlDocument(base.Owner.Context, source));
HtmlParserOptions options = new HtmlParserOptions {
IsEmbedded = false,
IsStrictMode = false,
IsScripting = base.Owner.Options.IsScripting()
};
IElement documentElement = htmlDomBuilder.ParseFragment(options, context).DocumentElement;
while (documentElement.HasChildNodes) {
INode firstChild = documentElement.FirstChild;
documentElement.RemoveChild(firstChild);
this.PreInsert(firstChild, null);
}
}
public override INode Clone(bool deep = true)
{
DocumentFragment documentFragment = new DocumentFragment(base.Owner);
CloneNode(documentFragment, deep);
return documentFragment;
}
public void Prepend(params INode[] nodes)
{
this.PrependNodes(nodes);
}
public void Append(params INode[] nodes)
{
this.AppendNodes(nodes);
}
public IElement QuerySelector(string selectors)
{
return base.ChildNodes.QuerySelector(selectors);
}
public IHtmlCollection<IElement> QuerySelectorAll(string selectors)
{
return base.ChildNodes.QuerySelectorAll(selectors);
}
public IHtmlCollection<IElement> GetElementsByClassName(string classNames)
{
return base.ChildNodes.GetElementsByClassName(classNames);
}
public IHtmlCollection<IElement> GetElementsByTagName(string tagName)
{
return base.ChildNodes.GetElementsByTagName(tagName);
}
public IHtmlCollection<IElement> GetElementsByTagNameNS(string namespaceURI, string tagName)
{
return base.ChildNodes.GetElementsByTagName(namespaceURI, tagName);
}
public IElement GetElementById(string elementId)
{
return base.ChildNodes.GetElementById(elementId);
}
public override void ToHtml(TextWriter writer, IMarkupFormatter formatter)
{
base.ChildNodes.ToHtml(writer, formatter);
}
}
}