2

我正在尝试使用 javascript 清除 .aspx 页面中的所有字段(应该是跨浏览器)。下面的代码适用于TextBox字段,但不适用于Label字段。

var elements = document.getElementsByTagName("input");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].type == "text") {
        elements[i].value = "";
    }
    else if (elements[i].type == "label") {
        elements[i].value = "";
    }
}

后来我看到 HTML 正在渲染 asp.net 标签,span所以我也尝试了:

else if (elements[i].type == "span") {
    elements[i].innerHTML = "";
}

仍然没有清除标签。我在这里做错了吗?

另一个问题是,每当我刷新页面时,清除的TextBox字段都会再次被旧值填充..(真令人沮丧)

我通过引用这个来尝试上面的代码

请帮忙。

4

4 回答 4

3

在现代浏览器中,这将清除所有 span 元素。

[].slice.call(document.querySelectorAll("span")).forEach(function(e){
    e.innerHTML="";
})

如果您已将类“标签”应用于 ASP 标签,那么您可以更具体:

[].slice.call(document.querySelectorAll(".label")).forEach(function(e){
    e.innerHTML="";
})

这是一个适用于旧版浏览器的示例:

var spans = document.getElementsByTagName("span");
for (var i=0; i < spans.length; i++)
{
    if ("label" == spans[i].className)
        spans[i].innerHTML = "";
}
于 2012-12-22T12:32:46.163 回答
3

这是因为没有labelor之类的类型spanspan并且label是完全不同的标签,因此您应该getElementsByTagName为它们中的每一个使用。下面的代码应该可以解决问题,但对 if 块使用更明确的条件。

var elements = document.getElementsByTagName("input");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].type == "text") {
        elements[i].value = "";
    }
}

elements = document.getElementsByTagName("span");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].className == "aspLabel") {
        elements[i].innerHTML = "";
    }
}

elements = document.getElementsByTagName("label");
for (var i = 0; i < elements.length; i++) {
    if (elements[i].className == "labelClass") {
        elements[i].innerHTML = "";
    }
}
于 2012-12-22T12:53:29.453 回答
0

通过引用@Bert Evans 的帖子,我解决了我的问题。问题是我的所有标签字段(包括标题)的类名称为“标签”。因此,如果我使用 Bert 的解决方案,它将清除所有标签字段,包括标题(我不想要)。早些时候,我认为我可以通过为要清除的字段分配多个类来解决这个问题。像这样的东西

<asp:Label class="label clear" ID="lblBoxId" runat="server" Text="Box Id:"></asp:Label>

然后是伯特的解决方案,

 var spans = document.getElementsByTagName("span");
 for (var i=0; i < spans.length; i++)
 {
     if ("clear" == spans[i].className)  //replacing 'label' with 'clear'
        spans[i].innerHTML = "";
 }

这并不能解决问题。但是当我使用这两个类的组合时,问题就解决了:)。

  if ("label clear" == spans[i].className)  //using combination of classes as condition

这可能很简单,但我真的浪费了我宝贵的时间来理解它。所以我分享了:)

编辑:也可以使用简单的方法来解决indexOf()

if (spans[i].className.indexOf("clear") != -1)   //not tested
于 2012-12-22T13:29:47.840 回答
0

为什么不使用带有 runat="server" 的 html 标签或 span,那么您将不会面临在不同浏览器中呈现不同控件的任何问题

<label id="lblMyLabel" runat="server"></label>

或者

<span id="spMySpan" runat="server"></span>

然后这段代码应该可以工作

var elements = document.getElementsByTagName("label");
for (var i = 0; i < elements.length; i++) {
        elements[i].innerHTML = "";
}
于 2012-12-22T13:45:11.510 回答