Javascript-форум (https://javascript.ru/forum/)
-   Events/DOM/Window (https://javascript.ru/forum/events/)
-   -   Как получить все элементы? (https://javascript.ru/forum/events/48618-kak-poluchit-vse-ehlementy.html)

newobject 10.07.2014 12:20

Как получить все элементы?
 
Допустим, у меня есть файл

<html>
<head></head>
<body></body>
</html>

Больше ничего нет.
Можно ли получить массив, или другую структуру всех html-элементов, которые "потенциально" могут оказаться на странице?

Когда мы делаем
p=document.createElement("p")
у нас записывается в переменную некий HTMLParagraphElement, или что-то в этом роде. Я думаю, что движок хранит где-то этот элемент, также как div, textarea, form и т.д. Как их достать, без создания?

krasovsky 10.07.2014 12:39

Открыв консоль ты можешь написать в ней window и увидеть что там много всякого интересного, например функции создания html элементов, я не знаю точно может и хранится где нибудь список нод. Но..зачем??

Aetae 10.07.2014 13:28

newobject, нельзя.
Но если ты извращенец, то можешь подменить document.createElement на свою функцию.

newobject 10.07.2014 13:31

Цитата:

Сообщение от Aetae
можешь подменить document.createElement на свою функцию.

А что это даст?

Aetae 10.07.2014 13:49

document.createElement = function(old){
    function createElement(){       
        return createElement.cache[createElement.cache.length] = old.apply(this, arguments)
    }
    createElement.cache = [];
    return createElement
}(document.createElement)

p=document.createElement("p")
d=document.createElement("div")

alert(document.createElement.cache)
Но во-первых такой ход поломает механизм GC т.к. ссылка на элемент всегда будет, а потому очистки не произойдёт никогда. А во-вторых(следует из первого) неизвестно какие из этих элементов будут использованы, а какие уже устарели.

newobject 10.07.2014 14:58

Aetae,
Это конечно интересно, но это ничего не решает. Уже созданные элементы можно и так выдернуть, к тому же при таком создании

p=document.createElement("p")
d=document.createElement("div")

они доступны еще и из глобала. А вопрос в том, чтобы иметь доступ к самим объектам, из которых создаются элементы. К примеру, тот же HTMLParagraphElement. Это функция же. вот она должна возвращать этот самый объект. Но если сделать вот так:

window["HTMLParagraphElement"]()

возвращает ошибку NOT_SUPPORTED_ERR

То есть, под капотом именно эта ф-ция возвращает объект параграфа. Вопрос в том, как ее вызвать и получить объект, который она возвращает.

Aetae 10.07.2014 22:37

Это не часть языка js это надстройка(api) со стороны браузера. Ты ничего не сможешь сделать с "HTMLParagraphElement", кроме разве что дополнения прототипа. И совершенно не понимаю ЧТО тебе от него надо.


Часовой пояс GMT +3, время: 06:17.