NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!
NOVINKA - Online rekvalifikační kurz Java programátor. Oblíbená a studenty ověřená rekvalifikace - nyní i online.

Lekce 4 - Odstraňování obsahu v jQuery (DOM)

V minulé lekci, Nahrazování obsahu & klonování v jQuery (DOM), jsme se naučili nahrazovat a klonovat obsah stránky pomocí javascriptové knihovny jQuery.

V dnešním tutoriálu si ukážeme odstraňování obsahu, vyzkoušíme si to také na příkladech.

Opět si vytvoříme HTML soubor a JS soubor. Do JS si vložíme základní kostru.

$(function(){
    // Kód, který se spustí až po načtení stránky
});

Do HTML si vložíme následující kód:

<ul>
    <li>Pondělí</li>
    <li>Úterý</li>
    <li>Středa</li>
    <li>Čtvrtek</li>
    <li>Pátek</li>
    <li>Sobota</li>
    <li>Neděle</li>
</ul>

A rovnou si k dokumentu přidáme také styly:

ul {
    list-style-type: none;
    margin: 0px;
    padding: 0px;
}

ul li {
    font-family: 'Open Sans';
    font-size: 18px;
    margin: 10px 20px;
    padding: 5px 10px;
    background: #0080C0;
    width: 100px;
    color: #ededed;
}

Náš dokument nyní vypadá takto:

Tvoje stránka
localhost

Naučíme se odstraňovat obsah pomocí jQuery metod, kterými jsou remove(), empty() a detach(). Pojďme si je tedy představit!

remove()

Metoda remove() odstraní nadobro vybrané elementy z DOM. Použití je jako vždy jednoduché, stačí napsat:

$('ul li').remove();

Výsledek:

Tvoje stránka
localhost

Čímž jsme odstranili všechny položky seznamu.

Ukázka #1

Zkusme odstranit položky až po kliknutí. To uděláme jednoduše připojením události kliknutí na položku seznamu metodou on('click'). Události jako další argument předáme anonymní funkci s obsluhou události. Uvnitř poté odstraníme položku, na kterou jsme klikli. Tu získáme pomocí $(this).

$("ul li").on('click', function() {
    $(this).remove();
});

Živé demo:

Tvoje stránka
localhost

Bezvadné, vše nám funguje. Mimochodem, pomocí funkce $() si kromě proměnné this můžeme obalit kterýkoli element v čistém JavaScriptu, na kterém následně půjdou volat jQuery metody.

Můžeme se pustit do další ukázky.

Ukázka #2

Co když například budeme chtít odstranit všechny elementy, které obsahují nějaké slovo, nebo jeho část, například "ek"? Na to nám poslouží "doplňující selektor" filter(), který filtruje náš aktuální selektor. V filter() použijeme ":contains('ek')", což nám vybere všechny elementy, které obsahují text 'ek'. Pozor, filtr je case sensitive, záleží tedy na velikosti písmen.

$('ul li').filter(":contains('ek')").remove();

Výsledek:

Tvoje stránka
localhost

Působivé, že? Zápis je ovšem stále poněkud zdlouhavý. Metoda remove() nám nabízí uvést jako argument selektor, můžeme náš kód upravit na:

$('ul li').remove(":contains('ek')");

Čímž dosáhneme stejného efektu. Zkusme si ještě odstranit "Sobota" a "Neděle. Jako selektor nám nyní bude sloužit `), :contains('Ne­děle')"`.

$('ul li').remove(":contains('Sobota'), :contains('Neděle')");

Nyní tedy víme, kdy máme chodit do školy či do práce :) :

Tvoje stránka
localhost

Protože jsme si již remove() důkladně procvičili, přejdeme dále.

empty()

Metoda empty(), v překladu vyprázdnit, vyprázdní daný element od veškerého obsahu. Metoda nepřijímá žádný argument.

Ukázka #3

Pojďme si ukázat, jak se dá vyprázdnit položka "Úterý". Přidejme si na položku úterý id="den2".

<ul>
    <li>Pondělí</li>
    <li id="den2">Úterý</li>
    <li>Středa</li>
    <li>Čtvrtek</li>
    <li>Pátek</li>
    <li>Sobota</li>
    <li>Neděle</li>
</ul>

A JS kód:

$('#den2').empty();

Výsledek:

Tvoje stránka
localhost

Jednoduché.

Ukázka #4

Pokud bychom chtěli opět vyprázdnit element, který obsahuje nějakou část textu, stačí použít filter().

$('ul li').filter(':contains("e")').empty();

Výsledek:

Tvoje stránka
localhost

Nyní nám varianta, kde jsme jako argument metody přidali selektor, nebude fungovat. Můžete si to vyzkoušet.

$('ul li').empty(':contains("e")');

Uvidíte, že metoda empty() argument ignoruje a vykoná vše jako by tam nebyl.

detach()

Detach znamená v překladu odpojit. Metoda nám vyjme element (podobně jako když použijeme Ctrl + X), který následně můžeme uložit do nějaké proměnné.

Ukázka #5

Vytvoříme si pod seznamem odstavec, který bude obsahovat text "Nic tu není".

Do našeho HTML přidáme:

<p>Nic tu není</p>

Nyní zkusme vyjmout položku "Úterý" (má id #den2). Po vyjmutí vložíme element #den2 do odstavce, jehož obsah tím přepíšeme.

$('p').text($('#den2').detach().text());

Výsledek:

Tvoje stránka
localhost

Na tento konkrétní příklad by se více hodila např. metoda append(). Pojďme si tedy ukázat, jak detach() využít lépe!

Ukázka #6

Metoda detach() je vhodná jakmile chceme vybrat nějaké elementy a později je někam vložit. Pojďme si tedy udělat takovou malou hříčku. Po kliknutí na položku našeho listu tuto položku detachujeme a uložíme ji do proměnné typu pole. Při kliknutí na odstavec do něj vložíme všechny položky z tohoto pole.

Pole si vytvořme ještě před registrováním on('click'), proměnnou pojmenujme např. sklad.

let sklad = [];

Po kliknutí na odstavec jej vyčistíme pomocí empty(). Poté zavoláme metodu $.each(), které předáme jako parametr sklad, jakožto proměnnou, se kterou bude pracovat. Dále vytvoříme anonymní funkci, která bude přijímat parametry i a v. Parametr i je jako index a v jako value.

let sklad = [];

$('ul li').on('click', function() {
    sklad.push($(this).detach());
});

$('p').on('click', function() {
    let toto = $(this);
    $(toto).empty();
    $.each(sklad, function(i, v) {
        $(toto).append(v);
    });
})

Živé demo:

Tvoje stránka
localhost

Vše by nám mělo fungovat, vyzkoušejte si to.

V příští lekci, Třídy v jQuery (DOM), si ukážeme jak v jQuery manipulovat se třídami elementů.


 

Měl jsi s čímkoli problém? Stáhni si vzorovou aplikaci níže a porovnej ji se svým projektem, chybu tak snadno najdeš.

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 391x (1.23 kB)
Aplikace je včetně zdrojových kódů v jazyce JavaScript

 

Předchozí článek
Nahrazování obsahu & klonování v jQuery (DOM)
Všechny články v sekci
jQuery - Dynamické doplňky webu snadno a rychle
Přeskočit článek
(nedoporučujeme)
Třídy v jQuery (DOM)
Článek pro vás napsal Honza Bittner
Avatar
Uživatelské hodnocení:
117 hlasů
FIT ČVUT alumnus :-) Sleduj mě na https://twitter.com/tenhobi a ptej se na cokoli na https://github.com/tenhobi/ama.
Aktivity