Nejbližší nadřazený element – closest

Pokud je skriptem vybrán nějaký element, jde se dostat pomocí parentNode k jeho nejbližšímu předkovi.

<div class="predek">
  <div id="potomek">
  </div>
</div>

Pro tento HTML kód to v JS vypadá následovně:

var potomek = document.getElementById("potomek");
var predek = potomek.parentNode;

Hodí se to například při přepínání třídy společnému obalu tlačítka a obsahu, který se má zobrazit/skrýt. Značný problém tohoto postupu je ale v tom, že je JS kód hodně závislý na změně HTML – stačí přidat třeba další obal, a vše přestane fungovat.

Pomocí closest jde nadřazený element specifikovat CSS selektorem (selektor se zadává podobně jako u querySelector/querySelectorAll).

Zápis

Metoda closest má jeden povinný parametr, což je CSS selektor.

<div class="predek">
  <div>
    <div id="potomek">
    </div>
  </div>
</div>

Pro tento HTML kód, kde je mezi potomkem a předkem další <div>, jde provést následující:

var potomek = document.getElementById("potomek");
var predek = potomek.closest('.predek');

Kód vybere nejbližší nadřazený element, co má třídu predek.

Zajímavé a trochu zrádné je, že se element může dostat i „sám na sebe“, bude-li vyhovovat zadanému selektoru.

potomek.closest('div');

Tato konstrukce tedy opět vybere potomka (protože se jedná o <div>, čímž bude vyhovovat zadanému selektoru).

Podpora

Metoda closest je zatím podporována pouze v následujících prohlížečích:

  • Firefox 35,
  • Chrome 41,
  • Opera 18

Pro nepodporované prohlížeče jde podpora doskriptovat pomocí parentNode a querySelectoru nebo matches.

closest() v jQuery

JS knihovna jQuery disponuje obdobou nativní funkce closest.

Odkazy jinam

To je všechno. Líbil se vám článek a chcete se dozvědět, až vyjde další?

Sledujte:

 

Připomínky mi pište do komentářů ↓

Fixní postranní panel

Jak vytvořit fixovaný banner?

JavaScriptové řešení prvku, který při rolování zůstane stále viditelný.

Úprava libovolného textu na stránce

Úprava textu stránky pomocí designMode

Jednoduchý bookmarklet pro okamžité přepsání libovolného textu na stránce.

Zablokování kláves

Zablokování některých kláves

Zablokování určitých kláves (šipek) pomocí JavaScriptu.

Aktivování/deaktivování okna

Zachycení aktivování a deaktivování okna v JS

V JavaScriptu lze relativně snadno reagovat na aktivování nebo deaktivování okna/záložky/tabu.

Baterka v CSS a JavaScriptu

Vytvoření efektu baterky v CSS a JS

Jak jednoduše vytvořit na stránce efekt baterky? Tedy ztmavit web a prohlížet ho jakýmsi průzorem.

Komentáře