Autor Zpráva
Krakatoa
Profil
Tu:
http://www.jakpsatweb.cz/zalozky.html

Bych uvítal tento příklad:

<style type="text/css">
ol.references li:target{background-color:#ffc}
</style>

<a href="#1">[1]</a>
<a href="#2">[2]</a>

<ol class="references">
<li id="1">1</li>
<li id="2">2</li>
</ol>


Jde o zvýraznění záložky. Používá to např. wikipedia, příklad:
http://cs.wikipedia.org/wiki/PHP#cite_note-5

Potřeboval jsem to na web, myslel jsem, že je to javascript, po zakázání javascriptu jsem si říkal, že to bude jen html/css a hledal jsem to na výše uvedené stránce, nic jsem tam nenašel, tak jsem to zjišťoval koumanim z te wikipedie. Někomu by se to třeba hodilo. Pokud je to někde jinde na jpw, tak by se to hodilo odkázat z té stranky zalozky.html s odkazem zvýraznění záložky.
Chamurappi
Profil
Bylo by pěkné, kdyby celý JPW podporoval zdejší superkotvu #najdi. Na některé věci nejde pořádně odkázat.
Yuhů
Profil
Díky, dal jsem dolů do stránky http://www.jakpsatweb.cz/zalozky.html stručnou zmínku o :target a odkaz na rychlý příklad.

Superkotvu #najdi používat nebudu, protože vyžaduje javascript, který tam nechci (z důvodů kultu rychlosti a z důvodu pohanské bázně před neznámými javascriptovými silami).

Zvýrazňování nadpisů, na které lidi přišli, asi dělat nebudu, protože to mám vložené jako <a name="jméno"></a> a nikoli jako ídéčko u <h2>. Pokud jde zvýraznit <h2> obsahující <a name..>, budu moc rád za radu.
Chamurappi
Profil
Reaguji na Yuhůa:
z důvodů kultu rychlosti
JPW nepotřebuje celý balík funkcí, stačí jen jedna a výrazně oškubaná. Bohatě by stačilo zvýrazňování odstavce obsahujícího hledané slovo.

z důvodu pohanské bázně před neznámými javascriptovými silami
Můžeš se s nimi seznámit, nejsou zase tak tajemné (ani dlouhé):
function zvyrazneni()
{
  var kotva = location.hash.match(/^#najdi\((.*)\)$/);
  if(!kotva) return;
  var kdeMuze = { "P": true, "H2": true, "H3": true };
  for(var i = 0, element; element = document.getElementsByTagName("*")[i]; i++)
  {
    if(kdeMuze[element.tagName] && element.innerHTML.indexOf(kotva[1]) > -1)
    {
      element.className += " zvyraznit";
      element.scrollIntoView();
      window.scrollBy(0, -30);
      return;
    }
  }
}
Na třetím řádku si vytáhnu kotvu regulárem, v tom asi žádná věda není.
Na šestém nechám projet cyklem všechny elementy ve stránce. (Tenhle druh zápisu foru je v tomto případě rychlejší než klasika.)
Na osmém testuji, zda je jméno elementu mezi povolenými (nezajímá nás nic krom <p>, <h2> a <h3>) a jestli jeho innerHTML obsahuje hledaný výraz.
Na desátém přiřadím třídu zvyraznit.
Na jedenáctém vyvolám narolování na element, scrollIntoView je nativní metoda v prohlížečích.
Na dvanáctém popojedu kousek nahoru, aby ten nalezenec nebyl namáčknutý na strop prohlížeče.
Použití: zavolat zvyrazneni() kdekoliv na konci stránky (asi v patka.js, celá ta funkce by mohla být tam).

V CSS se pak zvýraznění nastyluje podle třídy zvyraznit, tedy nějak takto:
p.zvyraznit, h3.zvyraznit { background: #FFCFA4; border: 1px solid #FFA24A; }
h2.zvyraznit { /* asi nic… */ }

Pokud jde zvýraznit <h2> obsahující <a name..>, budu moc rád za radu.
Bez JS nejde. Skriptem by to bylo takhle:
var acko = document.getElementsByName(location.hash.substr(1))[0];
if(acko) acko.parentNode.className += " zvyraznit";

Ani jeden z uvedených skriptů nepočítá s tím, že by se kotva dodatečně změnila během načtení stránky. Pomohlo by to tedy jen těm, kdo jsou na takovou adresu přímo odkázáni odjinud (typicky z diskuse).
__construct
Profil
Chamurappi:
Nebolo by dobré tam doplniť aj prototypizáciu innerTextu?
↓Edit: Neviem prečo som mal pocit, že v Tebou uvedenom kóde nie je innerHTML, ale innerText. Preto som písal o tej prototypizácii.
Chamurappi
Profil
Reaguji na __constructa:
O použití innerText/textContent místo innerHTML jsem uvažoval, ale jednak by se tím zkomplikoval kód o něco, co už připomíná tajemné javascriptové síly, jednak lze počítat s tím, že si osoba odkazující na takovou kotvu ověří, že se trefuje, a případně změní slovo, na které cílí, takže nehrozí, že by innerHTML až tak vadilo.

Řádek osm by šel bez prototypu napsat i takhle:
    if(kdeMuze[element.tagName] && (element.innerText || element.textContent).indexOf(kotva[1]) > -1)
(Ovšem i to javascriptové chytré nebo je z toho pohanského hlediska trochu woodoo.)
Yuhů
Profil
díky, mám co číst, až se budu zase hodně nudit

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

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

0