Javascript getElementsByTagName(“div”)我在标记什么?

Javascript getElementsByTagName(“div”)我在标记什么?,javascript,gallery,getelementsbytagname,Javascript,Gallery,Getelementsbytagname,我试图将一组div“GalleryBox”(位于另一个div“galleryimages”中)的ID设置为递增,即picture1、picture2等 我看到过类似的问题,并试图让我的头脑绕过它们,但这很难。现在我的问题是,我从第二行得到了什么?什么是“厨房盒子”?我是否能够像一个数组一样循环使用它,并像我尝试的那样标记ID var galleryimages = document.getElementById("galleryimages"); var galleryboxes = galle

我试图将一组div“GalleryBox”(位于另一个div“galleryimages”中)的ID设置为递增,即picture1、picture2等

我看到过类似的问题,并试图让我的头脑绕过它们,但这很难。现在我的问题是,我从第二行得到了什么?什么是“厨房盒子”?我是否能够像一个数组一样循环使用它,并像我尝试的那样标记ID

var galleryimages = document.getElementById("galleryimages");
var galleryboxes = galleryimages.getElementsByTagName("div");

var k = 1;

for (var i = 0; i < galleryboxes.length; i++) {
galleryboxes[i].setAttribute=("id", "picture" + k);
k++;
}
var gallerymages=document.getElementById(“gallerymages”);
var gallerybox=gallerymages.getElementsByTagName(“div”);
var k=1;
对于(变量i=0;i

代码似乎很有效,但我不认为我实际上是在标记我想要标记的div;我检查了“picture1”的内容,结果显示为空(应该是一张图片和一些文本)。

GalleryBox
提供了一个节点列表,您可以像数组一样迭代,但这里有一个错误

galleryboxes[i].setAttribute=("id", "picture" + k);
应该是

galleryboxes[i].setAttribute("id", "picture" + k);
请注意缺少
=

也可以使用id属性来完成

galleryboxes[i].id = "picture" + k;

GalleryBox是一个数组,包含元素“GalleryImage”中的所有div


...
此文本将不在数组中

如果您的代码与上面类似,那么变量
gallerybox
将只包含div

至于当你检查“picture1”的内容时,它可能是空的,我想你已经在css中为#picture1定义了一个背景图像,对吗


无论如何,您应该使用firebug之类的工具来查看生成的DOM。这样,您可以更轻松地进行调试。

如果您希望以后以编程方式访问属性(至少如果您希望它能够一致工作),则需要直接设置属性(
GalleryBox[i].id
)。因此:

var gallerymages=document.getElementById(“gallerymages”);
var gallerybox=gallerymages.getElementsByTagName(“div”);
对于(变量i=0;i
例如。

从第二行我可以得到什么? 问题是:

var galleryboxes = galleryimages.getElementsByTagName("div");
这样做的目的是提供一个活动的
节点列表
,其中包含所有标记名为
的元素,这些元素是变量
galleryimages
表示的元素的子元素。注意,这不是一个实际的数组,数组和节点列表之间有区别的特征。最值得注意的是,
nodeList
不继承自
数组
构造函数,因此不包含所有数组通用的基本方法,如
push
pop
sort

我是否能够像一个数组一样循环使用它,并像我尝试的那样标记ID? 对。这对我们来说很容易,因为幸运的是
nodeList
s具有
length
属性。您已经演示了如何循环它们,但设置属性的行格式不正确:

galleryboxes[i].setAttribute=("id", "picture" + k);

等号不应该在那里。这将调用一个语法错误。如果去掉相等值,代码就可以正常工作。

我知道,您正在这里寻找javascript答案,但如果您也愿意,也可以尝试以下jQuery代码:

$("#galleryimages > div").each(function(i) {
    $(this).prop("id", "picture" + (i + 1));
});​

只看3行代码:)

以及我的明显错误,虽然我不完全理解这一点,但它似乎也很重要,否则我的代码就不能正常工作。我会投赞成票,但我似乎还没有这个能力。谢谢虽然我现在将坚持使用javascript,但等效代码对于理解非常有用,谢谢!是的,你说得对。我发布这个代码只是为了给你提供信息。因此,将来如果您想尝试jQuery,您将准备好代码…;)
galleryboxes[i].setAttribute=("id", "picture" + k);
$("#galleryimages > div").each(function(i) {
    $(this).prop("id", "picture" + (i + 1));
});​