2013-09-19 1 views
0

Я создаю кучу divs в javascript, и в определенное время я хочу удалить все div.getElementsByName, какое имя?

Мой код выглядит так:

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]); 

, но каждый раз, когда ТМР пустой массив, поэтому я не могу на самом деле удалить дивы я хочу,

Я попытался изменить

tile.name = "tiles" 

в

tile.nodeName = "tiles" 

или

tile.className = "tiles" 

, но ни один из них не работал, я просто удивляюсь, какой атрибут имя или свойство элемента точно есть один в getElementsByName?

+0

Это не массив, это псевдо-массив. Вы зацикливаетесь с 'for..in', но вы должны зацикливаться на' for'. Вы добавляете элемент в DOM? – elclanrs

+0

Привет, @elclanrs, я использовал для, я только что отредактировал его. –

+0

@ Кадр извините, но что здесь значит скрипка? –

ответ

0

Фактически DIV тег не имеет атрибута имени.

проверить по следующей ссылке:

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

дать вашему DIVS конкретный class и доступ затем с помощью:

elements = document.getElementsByClassName(className) 
+0

Итак, как я могу получить эти элементы здесь? Спасибо! –

+0

вы можете использовать атрибут 'class'. ответ модифицировано уже. –

+0

w3schools не следует приводить в качестве ссылки, см. Http://w3fools.com –

1

getElementsByName method возвращает список элементов с атрибутом под названием 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 и старше.

Из описания цели в вопросе кажется, что вам нужно просто собрать массив добавленных вами элементов, если впоследствии вам нужно их удалить. То есть, помимо добавления элемента в документ, вы добавляете его в массив, который вы создаете, а затем, когда вам нужно их удалить, вы просто проходите массив.

0

Здесь в вашем коде вы использовали следующие коды, включая tiles -

thisTile.name = "tiles"; 

и

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

Но вы должны использовать tiles[] вместо tiles сделать tiles массив элементов. Это единственная ошибка в вашем коде. ваш код будет работать нормально, если вы измените эти два утверждения.