Autor | Zpráva | ||
---|---|---|---|
Fil sama Profil |
#1 · Zasláno: 18. 8. 2011, 13:03:31
Zdravím, chtěl bych se zeptat jestli, lze převést proměnou, aby se k ní dalo přistopuvat pomocí DOM, bez toho abych její obsah musel nějak vypisovat.
O něco jsem se pokoušel, ale není to úpně ono, protože nemůžu přistupovat ke všem objektům a používat všechny vlastnosti. var text = "<html><head><title></title></head><body><a href='stranka'>odkaz</a></body></html>"; var html = document.createElement("body"); html.innerHTML = text; alert(html.getElementsByTagName("a").length); |
||
Fil sama Profil |
#2 · Zasláno: 18. 8. 2011, 15:50:42
Já potřebuju převést proměnou text, tak aby fungovala jako objekt document. Např. abych mohl vypsat počet odkazů takto: text.links.length.
|
||
_es Profil |
#3 · Zasláno: 18. 8. 2011, 16:30:19
Fil sama:
Môžeš si dynamicky vytvoriť iframe a v ňom už podľa ľubovôle čarovať s celým dokumentom.
No aj tak sa mi zdá, že niečo riešiš nejakým nevhodným podivným spôsobom. „var html = document.createElement("body");“ <html> a <body> sú odlišné elementy odlišného typu.
|
||
Fil sama Profil |
#4 · Zasláno: 18. 8. 2011, 17:25:08
Ten text nemůžu nikde zobrazovat, protože by mohl obsahovat script.
|
||
midlan Profil |
#5 · Zasláno: 19. 8. 2011, 14:09:08
Fil sama:
tak scripty z toho usekáš pomocí substring nebo nějak podobně a ten iframe nastavíš jako neviditelný ;) |
||
_es Profil |
#6 · Zasláno: 19. 8. 2011, 14:53:16
midlan:
„tak scripty z toho usekáš pomocí substring nebo nějak podobně“ Všetky možné spôsoby vloženia JS len tak „neuseká“, JS môže byť aj v HTML atribútoch. Fil sama: Vyzerá to na niečo veľmi pochybné - ako práca s nejakými cudzími kódmi - ak sa obávaš vloženého JS - mal by si upresniť, o čo sa pokúšaš. |
||
Časová prodleva: 14 dní
|
|||
midlan Profil |
#7 · Zasláno: 2. 9. 2011, 12:51:29
Tak já teď pracuji na stránce v ajaxu a mám hodně podobný problém tak nebudu zakládat nové téma. Načítám obsah .html souborů bez hlavičky do divu přes jquery způsobem:
$("div#id").load("stranka.html"); ale stránku chci do divu vložit až když budou načtené obrázky atp. které obsahuje stranka.html. Nevím jestli je jiné řešení než iframe a jestli ne tak jak to pomocí toho iframe napsat? Skušenosti s iframe+javascript nemám žádné... |
||
pcmanik Profil |
#8 · Zasláno: 2. 9. 2011, 13:08:07
midlan:
Obrazky nacitane nemozu byt, nakolko ajax, dokaze prenasat len textove data a nie binarne. |
||
Witiko Profil |
#9 · Zasláno: 2. 9. 2011, 13:43:42
midlan:
Vytvoříš si skrytý iframe element, vlastnost src mu nastavíš na adresu načítaného souboru, na událost onload zavěsíš kód, který iframe odkryje a vložíš iframe do dokumentu - třeba právě do toho divu. Nevýhodou je, že načítaná stránka musí být funkční sama o sobě - tzn. i s hlavičkami a se vším. Kdyby bylo možné událost onload přiřadit i na generické elementy - např. div (jako je to možné u body) - tak by ti stačilo to tvé $("div#id").load("stranka.html"); , skrytí obsahu divu a jeho odkrytí po načtení.
|
||
midlan Profil |
#10 · Zasláno: 3. 9. 2011, 12:46:53 · Upravil/a: midlan
Witiko:
„Nevýhodou je, že načítaná stránka musí být funkční sama o sobě - tzn. i s hlavičkami a se vším“ stranka.html neobsahuje hlavičku, jak jí do iframe dostanu? jinak jestli to dobře chápu tak až na tu hlavičku by to mělo být takhle: var ramec = document.createElement("iframe"); $(ramec).load(function() { $("div#id").load("stranka.html"); }).attr("src", "stranka.html"); Jde mi hlavně o ty obrázky, aby když se stranka.html načte do divu tak aby už byly načtené a vykreslené obrázky. EDIT: ještě mě napadlo pomocí php přidat hlavičku, a do iframe načítat něco jako preload.php?s=stranka.html, šlo by to tak? |
||
Yur4Y_ Profil * |
#11 · Zasláno: 3. 9. 2011, 12:50:46
Že sa sem tak drzo votrem - nebolo by vhodné použiť pre tento prípad metódu document.createDocumentFragment()?
|
||
midlan Profil |
#12 · Zasláno: 3. 9. 2011, 13:07:52
Yur4Y:
můžeš ukázat jak by se to dalo udělat? Mám k dispozici jedinou proměnou s celým kódem bez hlavičky. |
||
Yur4Y_ Profil * |
#13 · Zasláno: 3. 9. 2011, 13:30:23
midlan:
Funguje mi niečo na spôsob var text = "<body><a href='stranka'>odkaz</a><a href='stranka2'>odkaz2</a></body>", df = document.createDocumentFragment(), wrapper = document.createElement('html'); wrapper.innerHTML = text; df.appendChild(wrapper); alert(df.firstChild.getElementsByTagName('a').length); Ale s fragmentami som nikdy nerobil, takže nie som si istý, nakoľko je moje riešenie vyhovujúce. |
||
midlan Profil |
#14 · Zasláno: 3. 9. 2011, 13:42:53
Yur4Y:
nemyslím si že je to to co potřebuji, ledaže by fungovalo něco jako df.onload = function() {blok příkazů} |
||
Witiko Profil |
#15 · Zasláno: 3. 9. 2011, 14:54:53 · Upravil/a: Witiko
midlan:
DocumentFragment nic nemění na tom, že na jedné stránce nemůže být víc html dokumentů inline. Ohledně [#10] - ne, měl jsem spíše na mysli, že "div#id" by se takto nepoužilo. Jednoduše po načtení iframe by se daný iframe odkryl. Tzn. něco takovéhleho:
$("div#id").append( $("<iframe>").load(function() { $(this).show(); }).attr("src", "stranka.html").hide() ); |
||
midlan Profil |
#16 · Zasláno: 3. 9. 2011, 17:38:21 · Upravil/a: midlan
Witiko:
to už je jedno jak bych to vložil ne? Mě by to víc vyhovovalo jako plain html než v iframe. A k tý iframe hlavičce, jakým způsobem je nejelegantnější jí vložit? Přes php? EDIT: ještě důležitej dotaz: event .onload se spustí až když budou načtené i obrázky nebo jen načtený kód? |
||
pcmanik Profil |
#17 · Zasláno: 3. 9. 2011, 18:26:53
midlan:
To je take strasne zlozite pouzit google, alebo jpw.cz? |
||
Witiko Profil |
#18 · Zasláno: 3. 9. 2011, 18:39:39 · Upravil/a: Witiko
midlan:
„A k tý iframe hlavičce, jakým způsobem je nejelegantnější jí vložit? Přes php?“ Přes libovolný serverový scriptovací jazyk, který ti přirostl k srdci. „to už je jedno jak bych to vložil ne? Mě by to víc vyhovovalo jako plain html než v iframe.“ To není jedno, protože nikde není psáno, že ten prohlížeč nebude ty obrázky sosat znovu a prováděl bys zbytečně 2 požadavky pro 2 rozdílné soubory (jednou verzi s hlavičkou, podruhé bez ní). „event .onload se spustí až když budou načtené i obrázky nebo jen načtený kód?“ Měl by se spustit ve stejnou chvíli jako window.onload dokumentu uvnitř rámce - tzn. až poté, co se načte naprosto všechno. |
||
midlan Profil |
#19 · Zasláno: 3. 9. 2011, 23:57:58
Witiko:
tak jsem to chtěl udělat tak že z toho iframu vytáhnu html, jenže jsem asi objevil bug v chrome :D zdroj: $(function(){ var okno = document.createElement("iframe"); $(okno).attr("src", "stranka.html"); $("body").append(okno); $("iframe").load(function() { alert($($(okno).contents().find("body")).html()); }); }); Chrome pokaždé vyhodí null, ostatní prohlížeče vyhazují obsah body, ať je event .load bindlý na $(okno) i na $("iframe"). Používat iframe ve stránce se mi moc nechce. Takže asi končím a nechám to tak jak to mám teď (načítání plain html ze souborů bez hlavičky) :( |
||
Witiko Profil |
#20 · Zasláno: 4. 9. 2011, 01:02:09 · Upravil/a: Witiko
midlan:
„načítání plain html ze souborů bez hlavičky“ Taky bych to tak udělal. A pokud tak moc chceš preloadnout obrázky ještě před zobrazením, můžeš si nechat serverovým scriptem nechat na ajax žádost navrátit pole obrázků, přednahrát je a až poté stránku zobrazit, ale zdá se mi to jako kanón na vrabce, který iframe řeší celkem obstojně. Ideální by samozřejmě bylo, kdyby jakýkoliv generický element jako <div> či <span> podporoval onload event stejným způsobem jako element <body> . Nejblíže tomu je právě řešení přes iframe.
|
||
Časová prodleva: 13 let
|
0