Autor Zpráva
Flek
Profil
Dobrý den,
řeším takový menší problém s knihovnou jQuery.

Mám stránky a na něm více stejnojmenných prvků:
<div class='video'>

  <div class='schovano'>Schovaná data</div>
  
  <div class='zobrazeno'>Video 1</div>


</div>
<div class='video'>

  <div class='schovano'>Schovaná data</div>
  
  <div class='zobrazeno'>Video 2</div>


</div>

a tak dále..



a já potřebuji, aby při najetí na třídu "video" se skryla třída "zobrazeno" a objevila se třída "schovano", vím jak to udělat s jednojmennou třídou. Ale už nevím jak to udělat, pokud se na stránce nachází více DIVů se stejným názvem třídy.

Pokud by mě někdo mohl nasměrovat, budu mu vděčný.
Sir Tom
Profil
Flek:
Tohle obyčejně řeším tak, že danému elementu přidám jedinečnou třídu, kterou žádný další nemá.
$(".video").hover(
  function{
    $(this).addClass("selected");
    $(".selected .zobrazeno").hide();
    $(".selected .schovano").show();
  },
  function{
    $(".selected .zobrazeno").show();
    $(".selected .schovano").hide();
    $(this).removeClass("selected");
  }
);


Doufám, že mě, Chamurappi, nezabiješ, že zde používám opět jQuery kód. :) Nezlob se. :)
Flek
Profil
Sir Tom:
Děkuji, to mi bohatě stačí :).
Chamurappi
Profil
Reaguji na Sira Toma:
Doufám, že mě, Chamurappi, nezabiješ, že zde používám opět jQuery kód.
Dotaz přímo žádal jQuery kód, takže tě zabiju jen za to, že doporučuješ naprosto praštěné řešení.

Proč ne takhle?
$(".video").hover(
  function(){
    $(this).find(".zobrazeno").hide();
    $(this).find(".schovano").show();
  },
  function(){
    $(this).find(".zobrazeno").show();
    $(this).find(".schovano").hide();
  }
);
I kdyby neexistovala funkce find, šlo by to napsat bez prasáren.

Witiko ↓: Opraveno, díky za upozornění.
Witiko
Profil
Chamurappi, Sir Tom:
Nechybí vám náhodou oběma za tím klíčovým slovem function nefousaté závorky? :-)
pcmanik
Profil
Witiko:
nechybaju
Witiko
Profil
pcmanik:
Tak to jsem asi blázen, protože tohle:
(function{alert("test");})();
nespustím, ani kdybych se rozkrájel.

Vím, že nové verze Javascriptu se specifickými rozšířeními typu E4X (které pokud vím implementuje jen Mozilla, Rhyno, Actionscript atd. - na webových stránkách kvůli syntaktickým změnám reálně nevyužitelné) obsahovaly kromě takových vymyšliček, jakými jsou klíčová slova let a yield pro přehlednější práci s algoritmy či for each ... in pro iterování přes hodnoty objektu i možnost zkrácení zápisu funkce. Šlo však nicméně, co já vím, pouze o vypuštění bloku v případech, kdy se tělo funkce skládá z jednoho výrazu, tzn.:function a() b(); místo function a() {b();}. Možnost vypuštění kulatých závorek u funkcí bez argumentů by byla vítanější změnou, nicméně takovou možnost jsem nikde ECMA navrhovat neviděl.
pcmanik
Profil
Witiko:
Nezabudaj, ze jQuery sa nesnazi byt Javascriptom :D Proste to tam netreba, hod ockom na dokumentaciu.
V cistom JS mas, ale skutocne pravdu.
Witiko
Profil
pcmanik:
To bych se vskutku velice divil. Runtime volání metody hover s blábolem v argumentu neprovede a vyhodí SyntaxError jQuery nejQuery.
EDIT: jQuery zkoušečka od ah01 se mnou souhlasí.
Chamurappi
Profil
Reaguji na pcmanika:
Nezabudaj, ze jQuery sa nesnazi byt Javascriptom :D
Ale navždy jím bude, nemůžou změnit syntaxi.

hod ockom na dokumentaciu
Kam přesně?
Flek
Profil
Chamurappi:
Děkuji, nakonec jsem to vyřešil podle Tebe.
pcmanik
Profil
Chamurappi, Witiko:
Moja chyba, zle som pochopil Witiko-ovu poznamku o zatvorkach, myslel som ze hovori o inych, za vzniknuty flame sa ospravedlnujem.
Witiko
Profil
pcmanik:
Žádný flame, zajímalo by mě, jaké závorky jsi měl na mysli.
pcmanik
Profil
Witiko:
  
function(){(
    $(this).find(".zobrazeno").show();
    $(this).find(".schovano").hide();
  )}


Neviem preco, ale prislo mi, ze myslis tieto.
Witiko
Profil
pcmanik:
Uvědomuješ si, že tenhle zápis také jak v jQuery, tak ve vanilla javascriptu nedává sebemenší smysl a skončí opět SyntaxErrorem?
joe
Profil
Chamurappi:
doporučuješ naprosto praštěné řešení.
Praštěné řešení jsou obě dvě :-)

Když pominu to, že to celé jde udělat jednoduše v CSS, tak to jde udělat i jednodušeji v JS.

$(".video").hover(
  function(){
    $(this).addClass('hover');
  },
  function(){
    $(this).removeClass('hover');
  }
);


a v CSS pak definovat:
.video .zobrazeno { display: block; }
.video .schovano { display: none; }

.hover .zobrazeno { display: none; }
.hover .schovano { display: block; }
Witiko
Profil
joe:
To je praktické, avšak silně nesémantické (čti prasečí) řešení, protože zcela popírá pojmenování tříd zobrazeno a schovano. :-)
pcmanik
Profil
Witiko:
Ano uvedomujem si to, neviem co ma to dnes chyta, nic sa mi nedari, vsetko sa kazi... Ale to uz je nieco ine....
joe
Profil
Witiko:
To ale není můj problém, já jen používal vložený kód. Použil bych jiné názvy :)
Witiko
Profil
joe:
Fair enough, jedná se o relativně pěkné a čisté řešení. :-)

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:

0