Я создаю кучу divs в javascript, и в определенное время я хочу удалить все 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?
Фактически тег DIV
не имеет атрибута имени.
проверьте следующую ссылку:
http://www.w3schools.com/tags/tag_div.asp
дать вашим divs конкретный class
и получить доступ, используя:
elements = document.getElementsByClassName(className)
Метод getElementsByName
возвращает список элементов с атрибутом с именем name
с заданным значением, но только для тех элементов, в которых такой атрибут разрешен спецификациями HTML. И div
не среди них.
На самом деле это немного сложнее. Современные браузеры (включая IE 10) фактически реализуют его так, что рассматриваются все элементы с атрибутом name
в HTML-разметке, даже если разметка недействительна по спецификациям HTML, например <div name=tiles>foo</div>
. Но не элементы, которые имеют только свойство name
назначенное им в JavaScript. Разница заключается в том, что атрибут разметки также приводит к добавлению информации в объект attributes
.
Так что если вы действительно, действительно хотели использовать name
здесь (вы не должны), вы можете заменить
tile.name = "tiles"
от
thisTile.setAttribute("name", "tiles");
И он все равно не работал бы на IE 9 и старше.
Из описания цели в вопросе кажется, что вам нужно просто собрать массив добавленных вами элементов, если впоследствии вам нужно их удалить. То есть, помимо добавления элемента в документ, вы добавляете его в массив, который вы создаете, а затем, когда вам нужно их удалить, вы просто проходите массив.
Здесь, в вашем коде, вы использовали следующие коды, включая tiles
-
thisTile.name = "tiles";
а также
var tmp = document.getElementsByName("tiles");
Но вы должны использовать tiles[]
вместо tiles
чтобы сделать tiles
массивом элементов. Это единственная ошибка в вашем коде. ваш код будет работать нормально, если вы измените эти два утверждения.