当innerHTML遇上document.getElementById

      不知在通常的开发中,大家有没有遇到过这样的问题。

      例如现在有一个控件 ,如果想取这个控件的值有很多中方法,其中document.getElementById('name').value既是其中的一种。但是在实际的开发中可能碰到使用这个方法取不到值的情况。为了解决这个问题,我们有必要明白document.getElementById()这个函数的原理。

      这个函数是基于DOM树模型的,其中的id必须是唯一的。如果,id不唯一,取得是DOM树模型中第一个具有该标识的对象。因此,当使用这个函数取不到值时,因该检查一下在使用这个函数之前,是否有这个id,是否有同名的标识。

      innerHTML通常用来更改小区间的文档内容,可以和动态语言相结合达到很好的动态显示内容的效果。从DOM树模型来看,使用innerHTML可能对文档模型发生修改。这个时候使用JS来操作被修改区域的对象的时候,就需要从整体出发,尤其要注意ID是否重复。

      下面介绍一个让人迷惑的实例。

      

       这个HTML的基本思路是,由一个Div层作为container,动态的控制Div层中的内容。但是在浏览这个页面的时候,你会发现,使用alertAOutSide()和alertBOutSide()函数都取不到对应的填入的值,同时取到的值总是为空。

      通过这个现象,我们可以发现,在函数alertAOutSide()中所取到的对象和直接onclick后alert语句中的对象不一样。那么这是为什么呢?

      通过仔细分析文档结构,可以发现,当对container的div的innerHTML赋值完以后,innerHTML中就想到也增加了一个a<input type="text" id="Aname" name="Aname" οnclick="alert('AName='+this.value);alertAOutSide()"/>这样的语句,于是这个文档中就有两个id为Aname的对象。我们所填入的值是在第二个里,而我们用document.getElementById的时候取得是第一个值,第一个的值总是空,所以总是取不到值。

      明白了原因也就好解决了。解决的思路就是避免名称冲突。解决方法有很多种。基本都是使用display来控制,或者style.visibility来控制。下面给出一种解决方法。

     

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值