getElementsByName是哪个名字?

时间:2013-09-19 04:22:46

标签: javascript html properties getelementsbytagname

我在javascript中创建了一堆div,并且在某个时间我希望删除所有div。

我的代码是这样的:

function CreateDiv(width, height, row, col){
var thisTile = document.createElement("div");
thisTile.style.position = "absolute";
thisTile.style.width = width + "px";
thisTile.style.height = height + "px";
thisTile.style.top = row*TileH + topMargin + "px";
thisTile.style.left = col*TileW + leftMargin +"px";
thisTile.style.backgroundImage = "url(" + imagePath + ")";
thisTile.style.backgroundSize = imageWidth + "px " + imageHeight +"px";
thisTile.style.backgroundRepeat = "noRepeat";
thisTile.style.backgroundPosition =  "-" + col*TileW + "px -" + row*TileH + "px";
thisTile.onclick = TileClicked;
thisTile.name = "tiles";
document.body.appendChild(thisTile);
return thisTile;
}
...
var tmp = document.getElementsByName("tiles");
alert("tmp length: " + tmp.length);
for (var i = 0; i < tmp.length; i++)
document.body.removeChild(tmp[i]);

但是每次tmp都是一个空数组,所以我实际上无法删除我想要的div,

我试图改变

tile.name = "tiles"

tile.nodeName = "tiles"

tile.className = "tiles"

但是没有一个工作,我只是想知道元素的哪个名称属性或属性恰好是getElementsByName中的那个?

3 个答案:

答案 0 :(得分:1)

getElementsByName method返回具有名为name的属性的元素列表,其中包含给定值,但仅适用于HTML规范允许此类属性的元素。并且div不在其中。

实际上,它有点复杂。现代浏览器(包括IE 10)实际上实现了它,以便考虑HTML标记中具有name属性的所有元素,即使标记因HTML规范无效,例如{{1} }。但不是只在JavaScript中为其分配<div name=tiles>foo</div>属性的元素。区别在于标记属性还会将信息添加到name对象中。

所以,如果你真的,真的想在这里使用attributes(你不应该),你可以替换

name

通过

tile.name = "tiles"

它仍然不适用于IE 9及更早版本。

根据问题中目的的描述,您似乎应该只收集已添加的元素数组,如果您以后需要删除它们。也就是说,除了在文档中添加元素之外,还要将它附加到您创建的数组中,然后,当您需要将它们全部删除时,只需遍历该数组。

答案 1 :(得分:0)

实际上DIV代码没有名称属性。

检查以下参考:

http://www.w3schools.com/tags/tag_div.asp

给你的div一个特定的class然后使用:

访问
elements = document.getElementsByClassName(className)

答案 2 :(得分:0)

在您的代码中,您使用了以下代码,包括tiles -

thisTile.name = "tiles";

var tmp = document.getElementsByName("tiles");

但您必须使用tiles[]代替tiles来使tiles成为一系列元素。 这是代码中唯一的错误。如果你改变这两个语句,你的代码就可以运行了。