DOM订单总是一致吗? (JavaScript)的

时间:2014-03-16 00:04:10

标签: javascript

我想使用appendChild()创建以下网格格式的访问:

<div class="x">
    <div class="y">0-0</div>
    <div class="y">0-1</div>
    <div class="y">0-2</div>
</div>
<div class="x">
    <div class="y">1-0</div>
    <div class="y">1-1</div>
    <div class="y">1-2</div>
</div>
<div class="x">
    <div class="y">2-0</div>
    <div class="y">2-1</div>
    <div class="y">2-2</div>
</div>

然后,我将访问包含&#34; 2-1&#34;的div。使用这样的东西:

var x2y1 = document.getElementsByClassName('x')[2].getElementsByClassName('y')[1];

你们知道的任何问题,回到IE6?

2 个答案:

答案 0 :(得分:2)

getElementsByClassName是一个相当新的功能,我想在IE9中引入。 (就个人而言,我从未使用它,因为querySelector也可以这样做 - 还有更多 - 并且在IE8中引入了!)

无论如何,为所有这些功能定义了的订单http://www.w3.org/TR/dom/#concept-getelementsbyclassname注意到它会搜索有序集。

另请注意,getElementsByClassName会返回实时列表;结果中会立即看到对DOM的更改(这可能是它与querySelector(".classname")之间的关键区别 - 后者返回固定数组)。因此,如果您修改元素,请注意循环条件和索引。很容易忘记,然后只看到一些节点,因为索引从你的脚下改变了!

答案 1 :(得分:0)

相反,您可以为id提供divs属性,并且始终与以下内容保持一致:

<div class="x">
    <div class="y" id="0-0">0-0</div>
    <div class="y"  id="0-1">0-1</div>
    <div class="y"  id="0-2">0-2</div>
</div>

var x0y2 = document.getElementById('0-2');

您不必依赖DOM订单..