繁体   English   中英

在aspx中按属性查找元素

[英]Find element by attribute in aspx

<div id="foo" runat="server" data-id="bar"></div>

在后面的代码中,可以直接在id上或使用FindControl()访问此div。

但有没有办法根据另一个属性而不是id在aspx上搜索元素? 例如上面的data-id="bar"

此扩展方法(使用递归)可能会有所帮助:

public static IEnumerable<Control>
    FindControlByAttribute(this Control control, string key)
{
    var current = control as System.Web.UI.HtmlControls.HtmlControl;
    if (current != null)
    {
        var k = current.Attributes[key];
        if (k != null)
            yield return current;
    }
    if (control.HasControls())
    {
        foreach (Control c in control.Controls)
        {
            foreach (Control item in c.FindControlByAttribute(key, value))
            {
                yield return item;
            }
        }
    }
}

样品用法:

protected void Page_Load(object sender, EventArgs e)
{
    var controls = this
        .FindControlByAttribute("data-id")
        .ToList();
}

如果您还想按值过滤:

public static IEnumerable<Control>
    FindControlByAttribute(this Control control, string key, string value)
{
    var current = control as System.Web.UI.HtmlControls.HtmlControl;
    if (current != null)
    {
        var k = current.Attributes[key];
        if (k != null && k == value)
            yield return current;
    }
    if (control.HasControls())
    {
        foreach (Control c in control.Controls)
        {
            foreach (Control item in c.FindControlByAttribute(key, value))
            {
                yield return item;
            }
        }
    }
}

你需要看看你在FindControl中迭代的控件的属性是什么,或者你是否直接访问元素:

this.foo

然后,您可以使用Attributes集合来查看指定的属性值。 http://msdn.microsoft.com/en-us/library/kkeesb2c(v=vs.100).aspx

但要回答你的问题 - 不,除非你使用FindControl()迭代容器/父控件,否则没有

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM