Jump to content
  • 0

Получить все элементы на странице


YISHIMITSY
 Share

Question

Recommended Posts

  • 0
s0rr0w, а у меня вопрос.

Как закинуть в массив именно названия самих тегов, а не их коллекции?

Сейчас так: [object HTMLHtmlElement]

А нужно: HTML

Пройтись по всей коллекции нод и составить массив из nodeName каждого элемента

Link to comment
Share on other sites

  • 0
Пройтись по всей коллекции нод и составить массив из nodeName каждого элемента

Понял, вот получилось. :lol:

var e = document.getElementsByTagName("*");
var m = []
for(var i = 0; i<e.length;i++) m.push(e[i].nodeName)
alert(m)

Link to comment
Share on other sites

  • 0
Понял, вот получилось. :lol:

var e = document.getElementsByTagName("*");
var m = []
for(var i = 0; i<e.length;i++) m.push(e[i].nodeName)
alert(m)

Это не уникальный список. Т.е. теги с одинаковым названием будут несколько раз повторяться.

Link to comment
Share on other sites

  • 0
А что значит "Уникальный"? А как нужно делать тада?

Уникальный, значит не повторяется.

Если у тебя в документе 5 DIV'ов, четыре P и один SPAN, то уникальных тегов у тебя всего три: DIV, P, SPAN

Как нужно делать - придумывать тебе. Там есть два решения задачи, но можно и больше придумать.

Link to comment
Share on other sites

  • 0
Уникальный, значит не повторяется.

Если у тебя в документе 5 DIV'ов, четыре P и один SPAN, то уникальных тегов у тебя всего три: DIV, P, SPAN

Как нужно делать - придумывать тебе. Там есть два решения задачи, но можно и больше придумать.

Понял, тогда всё готово :lol:

var e = document.getElementsByTagName("*");
var m1 = []
for(var i = 0; i<e.length;i++) m1.push(e[i].nodeName)
m1.sort()

var cont = []
var c = m1[0]
var box = []
box.push(c)

for(var i = 0;i<m1.length;i++){
if(c == m1[i]){
box.push(m1[i])
}else{
cont.push(box)
box = []
c = m1[i]
box.push(c)
}

}
cont.push(box)
var m2 =[]
for(var k = 0; k<cont.length;k++) m2.push(cont[k][0])


alert(m2)

Link to comment
Share on other sites

  • 0

s0rr0w

А у меня вопрос.

Я получил уникальные теги, но мне этот способ не нравится, так как я считаю его громоздким. Мне хотелось бы узнать другие варианты решения, скажи плиз. :lol:

Link to comment
Share on other sites

  • 0
s0rr0w

А у меня вопрос.

Я получил уникальные теги, но мне этот способ не нравится, так как я считаю его громоздким. Мне хотелось бы узнать другие варианты решения, скажи плиз. :lol:

Создавай одноименные свойства у объекта.

Link to comment
Share on other sites

  • 0

var nodeList = document.getElementsByTagName("*");
var uniqueTags = {};
for ( var i = nodeList.length; i-- > 0;) {
var nodeName = nodeList.item(i).nodeName;
if ( !uniqueTags[ nodeName ] ) uniqueTags[ nodeName ] = true;
}
console.debug(uniqueTags)

Список тегов смотреть в консоли FireBug'a

Link to comment
Share on other sites

  • 0

Ахренеть, секунду, вопросы:

1) for ( var i = nodeList.length; i-- > 0;) - Что означает i-- > 0?

2) var nodeName = nodeList.item(i).nodeName; - Вот это ты каждому элементу присваиваешь свойство под названием nodeName?

3) if ( !uniqueTags[ nodeName ] ) uniqueTags[ nodeName ] = true; - А это выражение что означает?

4) console.debug(uniqueTags) - И вот это я тоже не понял, что значит?

Link to comment
Share on other sites

  • 0

Попробую сам объяснить и заодно буду благодарен за поправки, так как тоже учусь.

1) i-- > 0 — проверить, что i больше нуля и уменьшить на единицу. Постфиксная форма значит, что выполняется выражение, а потом изменяется значение.

2) Переменной nodeName присваиваем имя тега того узла, который рассматриваем в текущей итерации цикла

3) Проверяем, что в объекте uniqueTags нет свойства с именем текущего узла, если есть — этот тег уже обработан и находится в массиве.

Кстати, почему не записать if(!nodeName in uniqueTags)? Вроде то же самое, и нагляднее.

4) Выводим отдадочную информацию в консоль фаербага.

Кстати, Sorrow, а мы можем вместо использованного цикла for записать такой:

for (var i in nodeList) {
var nodeName = nodeList[i].nodeName;

}

и если нет, то почему?

Можем поломать порядок перечисления (чисто теоретически)?

Link to comment
Share on other sites

  • 0
Попробую сам объяснить и заодно буду благодарен за поправки, так как тоже учусь.

1) i-- > 0 — проверить, что i больше нуля и уменьшить на единицу. Постфиксная форма значит, что выполняется выражение, а потом изменяется значение.

2) Переменной nodeName присваиваем имя тега того узла, который рассматриваем в текущей итерации цикла

3) Проверяем, что в объекте uniqueTags нет свойства с именем текущего узла, если есть — этот тег уже обработан и находится в массиве.

Кстати, почему не записать if(!nodeName in uniqueTags)? Вроде то же самое, и нагляднее.

4) Выводим отдадочную информацию в консоль фаербага.

Спасибо, но вопросы:

3)

Проверяем, что в объекте uniqueTags нет свойства с именем текущего узла, если есть — этот тег уже обработан и находится в массиве.

А откуда взяться свойствам с именем текущего узла в объекте uniqueTags, если мы их туда не записывали?

А потом если есть, то про какой массив идёт речь?

4)

Выводим отдадочную информацию в консоль фаербага.

Что это всё значит? Это какая та функция, объект, или массив? И где смотреть эту инфу?

5) А можно как нибудь сделать, чтобы например создать массив и туда забросить все уникальные теги, покажите пример люди :lol:

Link to comment
Share on other sites

  • 0
А откуда взяться свойствам с именем текущего узла в объекте uniqueTags, если мы их туда не записывали?

А потом если есть, то про какой массив идёт речь?

В этой строке:

if ( !uniqueTags[ nodeName ] ) uniqueTags[ nodeName ] = true;

если такого свойства нет, оно создается, ему присваивается значение true.

А в фаербаг мы просто выводим объект uniqueTags, в котором содержатся все уникальные имена тегов, обработанных на данный момент.

Вкладка «консоль», там все будет видно.

Link to comment
Share on other sites

  • 0
В этой строке:

if ( !uniqueTags[ nodeName ] ) uniqueTags[ nodeName ] = true;

если такого свойства нет, оно создается, ему присваивается значение true.

А в фаербаг мы просто выводим объект uniqueTags, в котором содержатся все уникальные имена тегов, обработанных на данный момент.

Вкладка «консоль», там все будет видно.

аа, и выходит, что если допустим свойства нет и оно создаётся, то объект уже выглядит так:

uniqueTags = {
div: true
}

И наверное имеется ввиду не свойство, а поле, ведь в объекте же поля?

Link to comment
Share on other sites

  • 0
аа, и выходит, что если допустим свойства нет и оно создаётся, то объект уже выглядит так:

uniqueTags = {
div: true
}

И наверное имеется ввиду не свойство, а поле, ведь в объекте же поля?

Совершенно верно.

А поле и свойство, насколько мне известно, равнозначные термины, правильны оба.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.
Note: Your post will require moderator approval before it will be visible.

Guest
Answer this question...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

 Share

×
×
  • Create New...

Important Information

We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue. See more about our Guidelines and Privacy Policy