HTML中的重复ID问题

我们通常认为在同一个文档中元素的ID是唯一的,至少从逻辑上它应该是唯一的。传统的网页确实没有ID重复的必要,但现代Web中还有单页面的架构,模块是动态加载的,他们全都在同一个文档中,因此ID重复就很难避免。所以有时候,我们要视ID为非唯一的。
  通过ID获取元素最常用的方法就是getElementById,但这个方法显然是单数的,它永远都只能获取到一个元素,如果页面存在多个ID相同的元素,它只能获取到第一个。使用jQuery的选择器也会遇上同样的问题,因为在处理针对ID的选择器时候jQuery同样使用getElementById。如果需要获取ID为某个值的所有元素,应该使用querySelectorAll,这个方法很明确的返回一个集合,所以它可以包含多个同ID的元素。但是IE7-不支持它,所以如果存在多个ID相同的元素,选择起来就会像根据Class选择一样麻烦。当然,jQuery也可以简化这些操作,虽然上面说直接针对ID选择时只能获取到一个,只要给选择器中加入任何其它东西就可以让jQuery不使用getElementById
  下面是一段测试代码:

<div id="a"><div id="x">ax</div></div>
<div id="b"><div id="x">bx</div></div>
<script src="http://code.jquery.com/jquery-1.10.2.min.js"></script>
<script>
var i,j,tests=[
  '$("#a #x")','$("#b #x")','$("#x")','$("*#x")',
  'document.querySelectorAll("#x")'
],output;
for(i=0;i<tests.length;i++)try{
  output=Array.prototype.slice.call(eval(tests[i]),0);
  for(j=0;j<output.length;j++)
    output[j]=output[j].firstChild.data;
  throw output;
}catch(e){
  console.log(tests[i]+" => "+e);
};

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值