在 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?
每次循环迭代都会覆盖文本值。
更新的代码:
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");
}
}
}
}