在 C# 中使用具有相同类名的多个元素的类名获取元素 ID

本文关键字:元素 ID 获取 同类 | 更新日期: 2023-09-27 18:32:14

private void button5_Click(object sender, EventArgs e)
{
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input");
    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("className")== "input-style1 psgn-name")
        {
            textBox10.Text = link.GetAttribute("id");
        }
    }
}

结果:我只得到具有相同类的 4 个元素中的第 4 个元素 ID 的 ID。现在如何获取其余的 3 元素 id?

在 C# 中使用具有相同类名的多个元素的类名获取元素 ID

每次循环迭代都会覆盖文本值。

更新的代码:

private void button5_Click(object sender, EventArgs e)
{
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input");
    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("className")== "input-style1 psgn-name")
        {
                textBox10.Text += link.GetAttribute("id");
        }
    }
}

如果你想说把找到的前四个项目(如果它们存在)放在不同的文本框中,那么你需要填充一个列表,然后像这样引用它:

private void button5_Click(object sender, EventArgs e)
{
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input");
    List<String> results = new List<String>();
    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("className")== "input-style1 psgn-name")
        {
                results.Add(link.GetAttribute("id"));
        }
    }
    textbox10.Text = results[0];
    textbox11.Text = results[1]; etc....
}

使用 Linq 可以得到一个更优雅的解决方案:

需要使用 System.Linq

String[] results = (from itm in links where itm.GetAttribute("className") == "input-style1 psgn-name" select itm.GetAttribute("id")).ToArray();

然后用数组元素填充你的盒子。

在文本框中,每次都会覆盖 ID。您需要在文本框中连接字符串。所以。。。

private void button5_Click(object sender, EventArgs e)
{
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input");
    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("className")== "input-style1 psgn-name")
        {
            textBox10.Text += link.GetAttribute("id") + ",";
        }
    }
    // Remove last comma
    if(!string.IsNullOrWhiteSpace(textBox10.Text)){
        textBox10.Text = textBox10.Text.Substring(0, textBox10.Text.Length - 1);
    }
}

现在,在文本框中,您可以看到以逗号分隔的元素 id 列表。

如果要设置不同的文本框:

private void button5_Click(object sender, EventArgs e)
{
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input");
    int i = 10;
    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("className")== "input-style1 psgn-name")
        {
            foreach(Control ctrl in Controls)
            {
                if (ctrl is TextBox){
                    TextBox tb = (CheckBox)c;
                    if(tb.Name == "textBox" + i) {
                        i++;
                        tb.Text = link.GetAttribute("id");
                    }
                }
            }
        }
    }
}

private void button5_Click(object sender, EventArgs e)
{
    HtmlElementCollection links = webBrowser1.Document.GetElementsByTagName("input");
    int i = 10;
    foreach (HtmlElement link in links)
    {
        if (link.GetAttribute("className")== "input-style1 psgn-name")
        {
            TextBox tb = Controls.Find("textBox" + i) as TextBox;
            i++;
            if(tb != null) {
                tb.Text = link.GetAttribute("id");
            }
        }
    }
}