Autor | Zpráva | ||
---|---|---|---|
Amunak Profil |
#1 · Zasláno: 28. 11. 2009, 22:27:50 · Upravil/a: Amunak
Dnes snad poslední javascriptový dotaz :)
Mám hotový, vygenerovaný kód a potřebuji z něj smazat určitou část. Je to vlastně od počátku tagu <span> k jeho ukončovací značce. Jenže ten span nemá ID ani nic, čím bych to mohl adresovat a na stránce se mu mění pořadí. Jediné co znám je jeho obsah. Říkal jsem si, že by to mělo nějak jít přes regulární výrazy a funkce pro práci s textem, ale to je všechno, co jsem byl schopný vymyslet. |
||
Leo Profil |
#2 · Zasláno: 28. 11. 2009, 22:53:30
Nejjednodussi je mu dat id.
Kazdopadne muzete pouzit bud nacteni innerHTML a parsovani pres regularni vyrazy, nebo prochazet uzly az se dostanete k hledanemu textu v nejake vlastnosti nodeValue. Leo |
||
Amunak Profil |
#3 · Zasláno: 28. 11. 2009, 23:11:12
Leo:
„Nejjednodussi je mu dat id.“ To je přesně to, co udělat nemůžu, protože vlastně upravuji kód doplňkem GreaseMonkey až po jeho načtení a do kódu stránky jako takového nemám možnost ze strany serveru zasáhnout. „a parsovani pres regularni vyrazy“ přesně něco takového jsem měl na mysli, ale nevím, jak to napsat. Mohl byste mi prosím ukázat konkrétní kód? Díky. |
||
Chamurappi Profil |
#4 · Zasláno: 29. 11. 2009, 02:58:22
Reaguji na Amunaka:
Můžeš rekurzivně projít celý dokument (tedy <body>, potomky <body>, potomky potomků <body>, potomky potomků potomků <body>, potomky potomků potomků potomků <body>, potomky potomků potomků potomků potomků <body>, potomky potomků potomků potomků potomků potomků <body>, potomky potomků potomků potomků potomků potomků potomků <body>, atd.) a v každém elementu se mrknout na text uvnitř. (To vlastně už radí Leo, ale ne tak důkladně.) „přesně něco takového jsem měl na mysli“ Pokud přepíšeš innerHTML celého dokumentu, zřejmě tím narušíš funkčnost ostatních skriptů, které se stránkou pracují. |
||
Amunak Profil |
#5 · Zasláno: 29. 11. 2009, 12:39:37 · Upravil/a: Amunak
Nakonec jsem se uchýlil k tomuto jednoduchému řešení, které překvapivě funguje:
document.body.innerHTML = document.body.innerHTML.replace(oldstr, ''); Díky všem za pomoc. //Edit: Chamurappi, odemkneš mi to prosím? :) Nakonec jsem přišel na to, že to přeci jen ruší skripty na stránce, konkrétně veškeré EventListenery. Takže Chamurappi měl zase pravdu (ch jo). Jenže já vůbec netuším, jak to udělat takhle rekurzivně, jak jsi popisoval, takže bych prosil o ukázku kódu... Ještě jednou díky. |
||
Amunak Profil |
#6 · Zasláno: 1. 12. 2009, 14:46:46
OK, takže ještě jednou. Prosím o konkrétní ukázku, jak ve stránce projít všechny určité tagy a v nich nahradit řetězec. Díky.
|
||
Chamurappi Profil |
#7 · Zasláno: 1. 12. 2009, 15:02:06
Reaguji na Amunaka:
Budeš mít funkci, které předáš jako argument nějaký element a ta cyklem projde všechny potomky dotyčného elementu. Textové uzly (ty mají potomek.nodeType = 3) porovnáš se svým hledaným textem a podle nálezu se rozhodneš, co dál; elementy (ty mají potomek.nodeType = 1) předáš jako argument té své hledací funkci (bude tedy volat sebe sama). |
||
Leo Profil |
#8 · Zasláno: 1. 12. 2009, 15:06:54
Tož tak :-) Pokud je tam nejvýš jeden span, který se má smazat, a hledany text ("ahoj") je primo v nem, neformatovany:
var span = document.body.getElementsByTagName("span"); var pocet = span.length; for (var i=0; i<pocet; i++) { if (span[i].firstChild.nodeValue=="ahoj") { span[i].parentNode.removeChild(span[i]); break; } } |
||
Amunak Profil |
#9 · Zasláno: 1. 12. 2009, 16:38:45 · Upravil/a: Amunak
Nechápu to. Udělal jsem si z toho funkci, prootže to využiji vécekrát, ale nefunguje to.
function SmazTag(tagname, inside) { var tag = document.body.getElementsByTagName(tagname); var pocet = tag.length; for (var i=0; i<pocet; i++) { if (tag[i].firstChild.nodeValue==inside) { tag[i].parentNode.removeChild(tag[i]); break; } } } V konzoli se vypisuje chyba: Chyba: span[i].firstChild is null Řádek: 148 Což je řádek s if (span[i].firstChild.nodeValue==inside){ jenže dělá mi to i v tom tvém nezměněném kódu, nechápu proč. Nakonec jsem to udělal takhle, a to už funguje: /* FCE NA MAZÁNÍ TAGŮ */ function SmazTag(tagname, inside) { var tag = document.body.getElementsByTagName(tagname); var pocet = tag.length; for (var i=0; i<pocet; i++) { if (tag[i].innerHTML==inside) { tag[i].parentNode.removeChild(tag[i]); break; } } } Ještě jednou, Leo, díky. |
||
Leo Profil |
#10 · Zasláno: 1. 12. 2009, 17:51:13
To je proto, ze span muze byt prazdny a to jsem neosetril, podminka by byla
if (span[i].firstChild && span[i].firstChild.nodeValue=="ahoj") ani to neresi situaci, kdy je ve spanu jeste vnorena znacka apod., kdyz je tech spanu k mazani vic apod. Byla to jen hruba kostra. Leo |
||
Amunak Profil |
#11 · Zasláno: 1. 12. 2009, 19:55:11
No hlavně, že jsem to z té kostry byl schopný sestrojit tak, že to fungovalo. Takže ještě jednou díky, bez tohohle bych se dál nedostal. Už to tu zamknu, protože jsme to vyřešili :)
|
||
Časová prodleva: 14 let
|
Toto téma je uzamčeno. Odpověď nelze zaslat.
0