是否有明确的方法来检索angleSharpIElement的xPath
我正试图将IElement传递给javaScript函数,因此我需要一种方法将angleSharp元素转换为javaScript-Dom元素
function selectLevels(element, name, level){
document.querySelectorAll("*").forEach(e => {
if(e.isEqualNode(element)){
e.setAttribute('level', level);
e.setAttribute('title', name);
}
})
}
我想通过传递下面C#代码中的一个元素来调用页面中的这个javaScript函数,但我从页面中得到了一个angleSharp not found错误。
IElement element = mainDoc.QuerySelector("strong");
Page.ClientScript.RegisterStartupScript(this.GetType(), "SelectLevel", "selectLevels('" + element + "', '" + name + "', '" + level + "')", true);
如果您有一个带有JavaScript代码的HTML文档,并且希望从C#调用JavaScript代码中的(全局(函数,那么以下示例适用于AngleSharp 0.15和AngleSharp.Js 0.14:
static async Task Main()
{
var html = @"<!DOCTYPE html>
<html>
<head>
<title>Test</title>
<script>
function selectLevels(element, name, level){
element.dataset.level = level;
element.dataset.title = name;
}
</script>
</head>
<body>
<h1>Test</h1>
<section data-level=1 data-title='section 1'>
<h2>Section test</h2>
</section>
</body>
</html>";
var jsService = new JsScriptingService();
var config = Configuration.Default.With(jsService);
var context = BrowsingContext.New(config);
var document = await context.OpenAsync(req => req.Content(html));
var selectLevels = jsService.GetOrCreateJint(document).GetValue("selectLevels");
var jsElement = JsValue.FromObject(jsService.GetOrCreateJint(document), document.QuerySelector("section"));
selectLevels.Invoke(jsElement, "2", "section 2");
Console.WriteLine(document.DocumentElement.OuterHtml);
}
因此,基本上,您可以用例如jsService.GetOrCreateJint(document).GetValue("selectLevels");
获得函数,并用其Invoke
方法调用它,为简单类型传递字符串参数,并用JsValue.FromObject
(例如JsValue.FromObject(jsService.GetOrCreateJint(document), document.QuerySelector("section"))
(转换IElement
。