c# - 使用 C# 在 webbrowser 控件中获取 HTML 元素的绝对位置

标签 c# html position

我想知道是否可以使用 C# 获取我在 webbrowser 控件中加载的特定 HTML 元素的绝对位置。

我几乎尝试了 .Net 提供的所有选项。 他们都没有给我正确的位置。他们都给我 Y 坐标 0..元素肯定不在 0..

有没有人有任何解决方案或想法来解决这个问题?

最佳答案

这是我目前得到的解决方案:

<罢工> //将我们的网络浏览器的大小设置为与图像相同的大小 整数宽度,高度; width = webBrowser1.Document.Images[0].ClientRectangle.Width; height = webBrowser1.Document.Images[0].ClientRectangle.Height;

webBrowser1.Width = width;
webBrowser1.Height = height;

//scroll vertically to that element
webBrowser1.Document.Images[0].OffsetParent.ScrollIntoView(true);

//calculate x, y offset of the element
int x = webBrowser1.Document.Images[s].OffsetRectangle.Left + 
webBrowser1.Document.Images[s].OffsetParent.OffsetRectangle.Left + 
webBrowser1.Document.Images[s].OffsetParent.OffsetParent.OffsetRectangle.Left+
webBrowser1.Document.Images[s].OffsetParent.OffsetParent.OffsetParent.OffsetRectangle.Left+
webBrowser1.Document.Images[s].OffsetParent.OffsetParent.OffsetParent.OffsetParent.OffsetRectangle.Left;

int y = webBrowser1.Document.GetElementsByTagName("HTML")[0].ScrollTop;

//now scroll to that element
webBrowser1.Document.Window.ScrollTo(x, y);

<罢工>

现在这段代码可以完美运行..但是计算偏移量时存在问题。我需要计算元素的 offsetparent,然后计算 offsetparent 的 offsetparent 等。我需要动态地这样做,而不是一个一个地添加它。我不知道该怎么做。有什么想法吗?

编辑: 这是我的最后一个也是最终版本,它适用于任何 html 元素,它将找到我想要的任何元素的绝对位置..

   public int getXoffset(HtmlElement el)
     {
         //get element pos
         int xPos = el.OffsetRectangle.Left;

         //get the parents pos
         HtmlElement tempEl = el.OffsetParent;
         while (tempEl != null)
         {
             xPos += tempEl.OffsetRectangle.Left;
             tempEl = tempEl.OffsetParent;
         }

         return xPos; 
     }  

     public int getYoffset(HtmlElement el)
     {
         //get element pos
         int yPos = el.OffsetRectangle.Top;

         //get the parents pos
         HtmlElement tempEl = el.OffsetParent;
         while (tempEl != null)
         {
             yPos += tempEl.OffsetRectangle.Top;
             tempEl = tempEl.OffsetParent;
         }

         return yPos;
     }

然后使用这个位置:

 //now scroll to that element
 webBrowser1.Document.Window.ScrollTo(x, y);

完成!

关于c# - 使用 C# 在 webbrowser 控件中获取 HTML 元素的绝对位置,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5954636/

相关文章:

html - 标题前面的导航栏,滚动时始终位于屏幕顶部

c# - 如何有效地丢弃数组并用新值填充它?

c# - 如何提高这些 linq 语句的可读性?

javascript - 使用提交按钮发送而不是回车键

html - div 堆栈的动态宽度

mysql - 检查字符串位置是否位于 mysql 中的正确位置

c# - WPF 工具包 PropertyGrid ExpandableObject 属性未正确显示嵌套类

c# - 使用包含方法的自定义 FaultException 类型

javascript - 即使调用成功,我的 jquery 动画功能也无法工作

c++ - 如何在C++中获取距给定位置一定距离内的对象列表