AngleSharp不支持原生jQuery语法,但提供CSS选择器+方法链式调用能力,如document.QuerySelectorAll(“ul li a”)返回IHtmlCollection,支持foreach或LINQ遍历;修改DOM需手动调用AppendChild等方法且确保IsFrozen==false。
AngleSharp 是否支持 jQuery 风格的链式选择和操作?
不支持原生 jQuery 语法(比如 $("div.item").find("a").attr("href")
但 AngleSharp 提供了高度类似的 CSS 选择器 + 方法链式调用能力,配合 IHtmlCollection 和 IElement 接口,能写出接近 jQuery 风格的 C# 代码。关键在于用好 QuerySelectorAll、QuerySelector、GetAttribute、TextContent 等方法,而不是试图复刻 $ 函数。
如何用 AngleSharp 实现类似 $("ul li a") 的选择?
直接使用 CSS 选择器字符串传给 QuerySelectorAll 即可,返回 IHtmlCollection,支持 foreach 或 LINQ:
var config = Configuration.Default.WithDefaultLoader();
var context = BrowsingContext.New(config);
var document = await context.OpenAsync("https://example.com");
var links = document.QuerySelectorAll("ul li a");
foreach (var a in links)
{
Console.WriteLine(a.GetAttribute("href") ?? "");
Console.WriteLine(a.TextContent.Trim());
}
- 注意:
QuerySelectorAll返回的是只读集合,不能像 jQuery 那样直接调用.html()或.append()修改 DOM - 若需修改,得手动调用
AppendChild、RemoveChild等 DOM 方法,且必须确保文档未被冻结(IsFrozen == false) - 选择器语法完全兼容标准 CSS3,支持
:nth-child、[data-id]、.class:hover等(部分伪类如:hover仅用于匹配,不触发状态)
为什么 document.QuerySelector("input[type=hidden]") 找不到元素?
常见原因不是语法错,而是 HTML 加载不完整或属性值含空格/引号未转义: