2009-03-06 42 views
1

我怎么能是指由ID的div嵌套时,它具有相同的ID嵌套在一个类似命名的div一个div参照一个div一个div内用相同的ID为另一个内的另一个

<div id="obj1"> 
    <div id="Meta"> 
     <meta></meta> 
    </div> 
</div> 

<div id="obj2"> 
    <div id="Meta"> 
     <meta></meta> 
    </div> 
</div> 

我想要得到的元

document.getElementById('obj1').getElementById('Meta').getElementsByTagName('meta') 
的innerHTML

不起作用

回答

23

只有当页面上有一个项目时才能使用ID,无论是SPAN,DIV还是其他任何项目。 CLASS是你应该使用的,当你可能有一个重复的元素。

代码不起作用,因为您是通过唯一ID引用元素,但页面上有多个元素。

10

编号应该为u NIQUE。

+0

感兴趣的一点/ =我想看到它已经用名为Id的程序编写了我有点坚持去改变他们 – Supernovah 2009-03-06 01:40:52

+0

是啊,你有点拧,除非你可以改变这一点。 – 2009-03-06 01:45:13

5

您也可能会遇到此标记的问题,因为“meta”标签只在head标签内而非body标签内是合法的。就我看Firebug而言,Firefox甚至可以将这些元标记拉出体外并将它们投入到头部(并且在这种情况下,将任何文本内容放入父div中),所以你根本不会在DOM中看到它们。

3

由于id属性是唯一的文档范围标识符,因此您应该命名空间您的id。

<div id="obj1"> 
    <div id="obj1_Meta"> 
     <meta></meta> 
    </div> 
</div> 

<div id="obj2"> 
    <div id="obj2_Meta"> 
     <meta></meta> 
    </div> 
</div> 

document.getElementById('obj1_Meta').getElementsByTagName('meta') 
4

为你提供了HTML,这应该工作:

document.getElementById('obj1').getElementsByTagName('div')[0].getElementsByTagName('meta'); 

只是忽略内div的,假的ID和标签名得到它。你也应该能够完全忽略内部的div,因为的getElementsByTagName搜索整个子树:

document.getElementById('obj1').getElementsByTagName('meta'); 
7

讨厌指出明显,但在你的榜样,obj1_Meta和obj2_Meta是唯一的ID的,所以如果是这种情况在您的工作代码:

document.getElementById('obj1_Meta').getElementsByTagName('meta')[0].innerHTML; 

将按所述工作。作为一个复选,你是否认为这个?

如果不是,真可惜......

为“差”或“错”为你的代码,将工作的选择是使用像jQuery JavaScript框架。一旦你包含它,你可以通过它一个CSS选择器(甚至是语义上不正确的),像这样得到的元素:

$('#obj1 #obj1_Meta meta').html() 

$()是说的jQuery的方式的document.getElementById()...对类固醇。 .html()等效于.innerHTML

其他框架,如PrototypeJS和MooTools也提供了类似的功能。

原型例如:

$$('#obj1 #obj1_Meta meta').innerHTML;//note the double $'s 

框架节省大量的时间和麻烦关于浏览器的兼容性,“失踪”的JavaScript方法(如getElementsByClassName方法)和快速编码AJAX。无论如何,这些东西使他们成为一个好主意。

6

ID的意思是独特的,智能地使用类。

<div id="obj1" class="obj"> 
    <div id="obj1_Meta" class="obj_Meta"> 
     <meta></meta> 
    </div> 
</div> 

<div id="obj2" class="obj"> 
    <div id="obj2_Meta" class="obj_Meta"> 
     <meta></meta> 
    </div> 
</div> 
  • .obj =目标两个元件
  • #obj1.obj =目标只有第一
  • #obj1.obj_Meta =目标OBJ1内DIV
  • #obj2.obj =目标只有第二
  • #obj2.obj_Meta =目标OBJ2内DIV