Autor Zpráva
sloncz
Profil
Hezký den, sepsal jsem si scritp na kontrolu obsahu zadaného divu a podle toho se provede akce, ovšem má to jeden háček.

Náhodně se zobrazuje
<div class="okol"><img src='img1'></div>
nebo
<div class="okol"><img src='img2'></div>

a script potom vypadá takto:

....

    var okol = $(this).html();
    if(okol = "<img src='img1'>"){
    alert("tip 1");
    } else {
    alert("tip 2");   
    }

...
Ovšem problém nastavá v tom, že i když se nahoře zobrazí jakýkoliv div, tak to vždy zobrazí alert("tip 1");
xROAL
Profil
if(okol == "<img src='img1'>"){
Porovnávanie sa vykonáva dvoma rovná sa. Jedno je priradenie.
V if si teda do premennej okol vložil hodnotu <img src='img1'> a podmienka prešla ako true.

Odporúčam používať nejaké IDE (osobne som veľmi spokojný s NetBeans) ktoré ťa na takéto veci upozorní hneď ako ich napíšeš.
sloncz
Profil
Oh, ano, děkuji.
Upravil jsem to sice na dvě ==
ale i když se zobrazí
<div class="okol"><img src='img2'></div>
tak se vykoná podmínka a vypíše to
alert("tip 1");
Trejpa
Profil
sloncz:
A není součástí $(this).html() náhodou víc obsahu, než jen přesně <img src='img1'>? Možná bys měl porovnávat výskyt a ne přesnou shodu.
sloncz
Profil
obsah to má
<div class=\"okol\" style=\"top: 0px; left: " + left + "px;\"><img style='margin:0 auto auto;height:35px;width:35px;' src='obr1.png'></div>
a v podmínce porovnávám

    var okol = $(this).html();
    if(okol == "<img style='margin:0 auto auto;height:35px;width:35px;' src='obr1.png'>"){
} else {
}
Trejpa
Profil
sloncz:
Tak to děláš špatně.
sloncz
Profil
Co přesně myslíte tím, že to dělám špatně? Takhle by to fungovat mělo ne? Vytáhne to obsah divu s class="okol" a obsah porovná s řetězncem, co je v podmínce, pokud se nepletu
juriad
Profil
sloncz:
Jsi si jistý každým znakem, včetně mezer (které můžou být opakované)?

Proč ne raději:
if($(this).find('img').attr('src') == 'obr1.png') {...}
sloncz
Profil
juriad:
Je možné, že někde vzniká mezera navíc a proto to potom špatně porovnává, to ale nevím jak poznat, protože když se na to koukám, tak tam žádnou mezeru navíc nevidím.

Použil jsem podmínku, kterou jste mi sem zaslal a vypadá to, že to funguje, takže vyřešeno. Děkuji :)
Chamurappi
Profil
Reaguji na sloncza:
Při čtení z vlastnosti innerHTML prohlížeč přeloží existující DOM do HTML podoby. Přesná podoba závisí na prohlížeči a nikdy se na ni nedá spoléhat. Rozhodně v ní nebudou stejné mezery a stejné formátování jako v původním HTML, protože tyto nepodstatné informace se při převodu HTML na DOM zahazují.
sloncz
Profil
Chamurappi:
To jsem nevěděl, děkuji za vysvětlení.


-----

Každopádně, co se týká toho mého problém, juriadub způsob funguje, ale přece jen se občas stane (1 z 4) že se podmínka vykoná chybně.
juriad
Profil
Chamurappi:
Už jsem se setkal s tím, že v jednom prohlížeči (myslím nějaké IE) byly mezery zachovány. Konkrétně problém byl v tom, že jsme kontrolovali obsah spanu, který obsahoval pár slov oddělených mezerou a pokud byly oddělené dvěma mezerami, zůstaly obě zachované ve vlastnosti innerHTML, na rozdíl od ostatních prohlížečů, kde se splácly do jedné. Také tam byly nějaké problémy s mezerami na začátcích a koncích.

sloncz:
Tak teď zjisti, v jakém případě to nefunguje.
Trejpa
Profil
Nejen proto bych se vyhnul porovnávání celého HTML řetězce a použil vyhledání unikátního podřetězce, zadaného raději bez mezer.

ukázka

Vaše odpověď

Mohlo by se hodit

Neumíte-li správně určit příčinu chyby, vkládejte odkazy na živé ukázky.
Užíváte-li nějakou cizí knihovnu, ukažte odpovídajícím, kde jste ji vzali.

Užitečné odkazy:

Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: