2013-06-14 17 views
7

Chcę uzyskać pełny stos DOM jako ciąg. Na przykład otwórz Chrome, naciśnij klawisz F12 i wpisz "document.all". Ten obiekt reprezentuje pełny DOM. Chcę przekonwertować ten obiekt jako ciąg znaków. W Chrome możesz eksplorować obiekt, rozszerzać sekcje i wyświetlać ich zawartość w konsoli debuggera internetowego. Czy istnieje możliwość konwersji pliku document.all jako ciąg? Lub podobne rozwiązanie z daje mi pełny stos DOM? Nie chcę tylko innerHTML/outerHTML, chcę zawartość dosłownie wszystko, co jest zdefiniowane w bieżącym DOM. Jakieś pomysły? Z góry dzięki ...Pobierz pełny stos DOM jako ciąg znaków

EDYCJA: Okay, myślę, że moje pytanie jest trochę zagmatwane, przepraszam za to. Aby to wyjaśnić: Chcę uzyskać każdą właściwość z , która jest zdefiniowana, każdy obiekt, w tym takie rzeczy jak "document.location", "document.location.hash", "window.innerHeight", "document.body.innerHTML "i tak dalej, używając JavaScript.

+3

'document.body.innerHTML'? –

+0

Proszę określić, jaki kontekst programowania ma być "pełny DOM ... jako ciąg znaków". Umieszczenie znacznika javascript w pytaniu nie wyjaśnia dokładnie, co próbujesz zrobić. – hardmath

+1

Spróbuj czegoś takiego jak 'var ignoreKeys = ['parentNode', 'ownerNode', 'previousElementSibling', 'ownerElement', 'offsetParent', 'ownerDocument', 'parentElement', 'previousSibling']; JSON.stringify (document.all, function (key, value) {console.log (key); return ignoreKeys.indexOf (key)> = 0? Undefined: value}); ' –

Odpowiedz

7

O ile mi wiadomo, nie ma sposobu na zdobycie każdej własności każdego przedmiotu.

przynajmniej w niektórych przeglądarkach (Chrome, na przykład), można uzyskać większość DOM z outerHTML na documentElement (element główny, np html):

var html = document.documentElement.outerHTML; 

Musiałbyś aby sprawdzić, czy twoja druga docelowa przeglądarka działa. Jako minimum, będą musieli innerHTML na body:

var bodyHTML = document.body.innerHTML; 

Ale jeśli chodzi o inne rzeczy, nie sądzę, istnieje jakikolwiek sposób, aby uzyskać każdą właściwość każdego obiektu. Na przykład, można znaleźć właściwości na window tak:

var key; 
for (key in window) { 
    // ...'key' is the property name, window[key] is the value... 
} 

... ale to tylko daje przeliczalny te właściwości, nie non-przeliczalny. I oczywiście trzeba będzie odwoływać się do obiektów, aby uzyskać ich właściwości (dzięki czemu można dostać się do obiektu na więcej niż jeden sposób   — na przykład, window === window.window i jest też top, self itd. martwić się, i podobnie dla document.all, document.forms, ...).

Więc niestety, podczas gdy można dostać dużo informacji mówisz, nie sądzę, można je dostać wszystko.

+0

Dziękuję za odpowiedź, ale nie chcę innerHTML lub outerHTML.Chcę stosu _full_ DOM, oznacza to, że chcę uzyskać każdy ciąg, który jest zdefiniowany w bieżącym DOM. – impuls23

+2

@ user2486107: Co powoduje, że 'outerHTML' na elemencie dokumentu go nie ma? Chodzi mi o to, myślę, że nie miałby "doctype", ale ... –

+1

@ T.J. Crowder: outerHTML to tylko zawartość jednej właściwości zdefiniowanej w bieżącym stosie DOM. Chcę wszystko. Na przykład outerHTML nie będzie zawierać treści "document.location.hash" lub "window.innerHeight". Chcę uzyskać wszystko, całe drzewo DOM w jego bieżącym stanie. – impuls23

0

Możesz to zaimplementować samodzielnie, korzystając z Object.getOwnPropertyNames, które będzie zawierać nawet właściwości nieprzeliczalne. Zrobiłem small example pokazując, w jaki sposób można to zrobić.

Powiązane problemy