2013-04-26 143 views
2

我一直在摆弄HTML最近,我有一个问题。HTML/Javascript范围

有没有办法以其他元素的子范围元素的id? 这很难描述,但这里有一个例子。

<body> 
    <div id="a"> 
    <div id="inner"></div> 
    </div> 
    <div id="b"> 
    <div id="inner"></div> 
    </div> 
</body> 

我不知道这是否是合法的(因为“内部”被宣布两次),但问题是:

假设我有一个网页完整的正方形的div有自己的风格和固定定位(有点像视窗8地铁), 我想能够组特定平方成正方形的所有部件,这样我可以使用JavaScript 集中在发言权的范围中的元素,在伪代码。

ClickMeButtonDiv.ClickMeButton.value = parseInt(ClickMeButton.value) + 1; 

总之,我想知道是否有可能组一个div到该分区的所有儿童,因为如果我有一个页面上100个方格做自己的事,它是一个头痛让所有由ID元素结合到全球范围内...

有没有办法做到这一点?

提前致谢!

+2

没有,'id'必须每页唯一的。 – Artless 2013-04-26 09:26:04

+0

我明白,但我想知道是否有任何非ID的方式来处理这个问题,因为如果我有许多不同的“范围”,和IDS绑定到全球范围内,则该页面有效地成为unmanagable。 – Dmitry 2013-04-26 09:27:09

+1

'id'是唯一的。改用'class'。 – Sandeep 2013-04-26 09:28:02

回答

4

你不能有非唯一的ID。尽管你可以使用class属性。将id="inner"更改为class="inner",如果您使用JQuery,则可以尝试使用子选择器。例如:

$("#a > .inner"); 

没有jQuery的

document.getElementById('a').getElementsByClassName('inner')[0]; 
+0

是使用类还是id? – Dmitry 2013-04-26 09:31:04

+2

它选择'ID =“A”'然后将所有'类=“内部”' – Artless 2013-04-26 09:32:02

+0

我觉得这个问题解决了,但我还是很好奇,如果这可以在纯JavaScript来完成。 – Dmitry 2013-04-26 09:32:08

2

id必须是唯一的。您所描述的分组问题最好使用类来解决。

<div id="a"> 
    <div class="inner"></div> 
    </div> 
    <div id="b"> 
    <div class="inner"></div> 
    </div> 

如果你想从inner元素我强烈建议使用jQuery,因为它可以让你选择由类元素读出数值。

<div id="a"> 
    <input type="text" class="inner" value="1" /> 
</div> 
<div id="b">  
    <input type="text" class="inner" value="2" /> 
</div> 

JS:

$('#a input.inner').val(); // == 1 
$('#b input.inner').val(); // == 2 
+0

感谢这些例子,我希望可以在没有JQuery的情况下完成,但这样做看起来很混乱,正如我在前面的回复中指出的那样。虽然这不应该成为问题,因为使用像我之前提到的那样复杂的东西可以充分利用JQuery。 – Dmitry 2013-04-26 23:29:07

+0

那么,如果可以用jQuery来完成的话,那么纯JS也是可以的。但由于jQuery库很容易使用,所以我会使用它。 ;) – Friederike 2013-04-27 11:58:30

+0

是的,但问题是,JavaScript不允许直接访问嵌套类,这意味着你必须迭代所有元素来找到他们的类,然后进入该元素,然后遍历该元素的元素并检查它们类,当它比嵌套的两层更深时,它会变得更加复杂,可能需要循环或递归。理想情况下,我希望能有一种方法来document.getElementByClass(“a”),getElementByClass(“b”)或类似document.getObject(“a.b”),但哦。 – Dmitry 2013-04-27 13:30:52