是否有确切的方法来检索xPath of a angleSharp IElement
我试图将一个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);
}
})
}我想通过从下面的javaScript代码中传递一个元素来调用页面中的这个C#函数,但是我从页面中得到了一个未找到的angleSharp错误。
IElement element = mainDoc.QuerySelector("strong");
Page.ClientScript.RegisterStartupScript(this.GetType(), "SelectLevel", "selectLevels('" + element + "', '" + name + "', '" + level + "')", true);发布于 2021-04-28 12:35:08
如果您有一个带有JavaScript代码的HTML,并且希望在JavaScript代码中从C#调用一个(全局)函数,那么下面的示例适用于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。
https://stackoverflow.com/questions/67281093
复制相似问题