getElementById.elements不拾取标签

Ale*_*lex 1 javascript asp.net jquery

代码优先:

function loopForm() {

var e = document.getElementById("form1").elements;

for (var i = 0; i < e.length; i++) {
  alert('this is ' + e[i].ID + ' of type' + e[i].type);
}  
Run Code Online (Sandbox Code Playgroud)

我上面的代码位于.js中,该.js是从.aspx中调用的,具有动态创建的控件,如文本框,下拉列表,复选框和标签,位于服务器端,形式为form1。我的问题是

代码获取了所有控件的ID和类型(标签除外),我正在寻找一种处理标签的方法(更改style.display,color等)

我尝试使用JQuery代码,例如:

$("#form1 label").each(function() {  //I used "div", "label" and all sort
alert('hi');
});  
Run Code Online (Sandbox Code Playgroud)

并且不起作用。请注意,尽管document.getElementById可能起作用,但是页面上存在的控件与以往不同,因此无法对其进行硬编码。

编辑:这是将标签添加到.aspx(在我的代码背后)的方式:

private Label lbl = new Label();
System.Web.UI.HtmlControls.HtmlGenericControl NewDiv = new System.Web.UI.HtmlControls.HtmlGenericControl("DIV");  
NewDiv1.Controls.Add(lbl);
form1.Controls.Add(NewDiv);
Run Code Online (Sandbox Code Playgroud)

Oli*_*der 5

在谈论时labels,我怀疑您是在指ASP.NET服务器控件,例如asp:Label。如果真是这样,那么您真的在寻找<span>标签,因为ASP.NET将a <asp:Label>变成了html <span>

并且,如果您想通过它们的ID引用这些元素,您会注意到ASP.NET在客户端使用的ID与在服务器端定义的ID不同。

但是,有一种解决方法。如果希望客户端ID与服务器ID相同,请在服务器控件上设置以下属性:ClientIdMode="Static".

例如,在您的.aspx页面中,您具有以下内容:

<asp:Label runat="server" Id="lblName"></asp:Label>
Run Code Online (Sandbox Code Playgroud)

它将在html中生成如下内容:

<span id="someservergeneratedid_lblName"></span>
Run Code Online (Sandbox Code Playgroud)

如果要自己控制ID,可以执行以下操作:

<asp:Label runat="server" ID="lblName" ClientIdMode="static"></asp:Label>
Run Code Online (Sandbox Code Playgroud)

这将在html中生成:

<span id="lblName"></span>
Run Code Online (Sandbox Code Playgroud)