首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从angleSharp元素获取Xpath

从angleSharp元素获取Xpath
EN

Stack Overflow用户
提问于 2021-04-27 10:14:28
回答 1查看 305关注 0票数 1

是否有确切的方法来检索xPath of a angleSharp IElement

我试图将一个IElement传递给一个javaScript函数,所以我需要一种将angleSharp元素转换为javaScript Dom元素的方法

代码语言:javascript
复制
function selectLevels(element, name, level){
    document.querySelectorAll("*").forEach(e => {
        if(e.isEqualNode(element)){
            e.setAttribute('level', level); 
            e.setAttribute('title', name);
        }
    })
}

我想通过从下面的javaScript代码中传递一个元素来调用页面中的这个C#函数,但是我从页面中得到了一个未找到的angleSharp错误。

代码语言:javascript
复制
IElement element = mainDoc.QuerySelector("strong");
Page.ClientScript.RegisterStartupScript(this.GetType(), "SelectLevel", "selectLevels('" + element + "', '" + name + "', '" + level + "')", true);
EN

回答 1

Stack Overflow用户

发布于 2021-04-28 12:35:08

如果您有一个带有JavaScript代码的HTML,并且希望在JavaScript代码中从C#调用一个(全局)函数,那么下面的示例适用于AngleSharp 0.15和AngleSharp.Js 0.14:

代码语言:javascript
复制
        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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/67281093

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档