如何让这个getElementsbyName适用于IE(和FF)?

时间:2011-02-19 06:14:11

标签: javascript asp.net html internet-explorer dom

这是在IE中出错但在FF中工作的JavaScript(错误 - “document.getelementsbyname(...)。0.innerhtml为null或不是对象”:

var oldVal = parseInt(document.getElementsByName("outSL")[0].innerHTML); //val from DB

这是asp.net代码,我想抓住将由数据库填充的内部html:

<asp:Label ID="LabelSL" runat="server" Text="" name="outSL" style="visibility:hidden;"></asp:Label>

id是动态的,当它呈现时它看起来像这样,它是我所追求的43:

<span id="ctl00_cpMainContent_LabelSL" name="outSL" style="visibility:hidden;">43</span>  

那么......我如何在IE和FF中使用相同的功能获得43?

谢谢!

2 个答案:

答案 0 :(得分:6)

GetElementByName在不同浏览器中的功能不同。我建议你使用jQuery访问你的元素。

答案 1 :(得分:2)

如果您有.NET 4.0,那么您可以编写干净的ID,然后只使用getElementById,因为作为Carnotaurus状态,getElementByName在浏览器中的功能不同。

http://weblogs.asp.net/scottgu/archive/2010/03/30/cleaner-html-markup-with-asp-net-4-web-forms-client-ids-vs-2010-and-net-4-0-series.aspx

如果您坚持使用.NET 2.0 / 3.5,那么您可以使用jQuery通过Id,Name或许多其他选择器访问元素。

http://api.jquery.com/category/selectors/

我还写了一个库来输出一个用于.NET 2.0 / 3.5的ID的json数组。

http://awesomeclientid.codeplex.com/

http://www.philliphaydon.com/2010/12/i-love-clean-client-ids-especially-with-net-2-0/

这会绕过所有控件runat服务器上的INamingContainer,它会输出一个数组:

<script type=”text/javascript”>
//<![CDATA[
var controls = {
"txtUserName": "ctl00_ContentPlaceHolder1_txtUserName",
"txtEmail": "ctl00_ContentPlaceHolder1_txtEmail",
"btnSubmit": "ctl00_ContentPlaceHolder1_btnSubmit"
};
//]]>
</script>

然后您可以通过ID访问元素,如下所示:

var element = document.getElementById(controls.btnSubmit);