Lekcja 2: Selektory jQuery

Jedną z najpotężniejszych funkcji jQuery jest możliwość łatwego wybierania elementów HTML na stronie za pomocą selektorów. jQuery wykorzystuje składnię selektorów CSS, którą już możesz znać, co czyni proces wybierania elementów bardzo intuicyjnym. Po wybraniu elementów możesz na nich wykonywać różne operacje (metody jQuery).

Podstawowe Selektory

jQuery obsługuje większość popularnych selektorów CSS:

Selektory Atrybutów

Możesz wybierać elementy na podstawie ich atrybutów:

Selektory Hierarchiczne (Relacyjne)

Pozwalają wybierać elementy na podstawie ich relacji z innymi elementami w drzewie DOM:

Filtry jQuery

jQuery dodaje własne filtry (pseudo-klasy), które rozszerzają możliwości selektorów CSS. Zaczynają się one od dwukropka (:).

Podstawowe Filtry

Filtry Treści

Filtry Widoczności

Filtry Formularzy

Zadanie praktyczne

Stwórz plik HTML zawierający listę nieuporządkowaną (<ul>) z kilkoma elementami (<li>). Niektórym elementom listy nadaj klasę "specjalny". Dodaj również kilka paragrafów (<p>), jeden z nich ukryj za pomocą CSS (style="display: none;").

Używając jQuery i selektorów:

  1. Wybierz wszystkie elementy listy i zmień ich kolor tekstu na niebieski (użyj metody .css(\'color\', \'blue\')).
  2. Wybierz tylko elementy listy z klasą "specjalny" i dodaj im pogrubienie (użyj metody .css(\'font-weight\', \'bold\')).
  3. Wybierz trzeci element listy (indeks 2) i zmień jego tekst (użyj metody .text(\'Zmieniony element\')).
  4. Wybierz wszystkie widoczne paragrafy i dodaj im klasę "widoczny" (użyj metody .addClass(\'widoczny\')).
Pokaż rozwiązanie

HTML:

<!DOCTYPE html>
<html>
<head>
    <title>Test Selektorów jQuery</title>
    <style>
        .widoczny { border: 1px solid green; padding: 5px; }
    </style>
</head>
<body>
    <h1>Testowanie Selektorów</h1>
    <ul>
        <li>Element 1</li>
        <li class="specjalny">Element 2 (specjalny)</li>
        <li>Element 3</li>
        <li class="specjalny">Element 4 (specjalny)</li>
        <li>Element 5</li>
    </ul>

    <p>To jest pierwszy paragraf.</p>
    <p style="display: none;">To jest ukryty paragraf.</p>
    <p>To jest drugi paragraf.</p>

    <script src="https://ajax.googleapis.com/ajax/libs/jquery/3.7.1/jquery.min.js"></script>
    <script>
        $(function() {
            // 1. Zmień kolor wszystkich li na niebieski
            $("li").css(\'color\', \'blue\');
            console.log("Zmieniono kolor li na niebieski.");

            // 2. Pogrub elementy li z klasą "specjalny"
            $("li.specjalny").css(\'font-weight\', \'bold\');
            // lub $(".specjalny").css(\'font-weight\', \'bold\'); jeśli klasa jest tylko na li
            console.log("Pogrubiono specjalne li.");

            // 3. Zmień tekst trzeciego elementu li (indeks 2)
            $("li:eq(2)").text(\'Zmieniony element\');
            console.log("Zmieniono tekst trzeciego li.");

            // 4. Dodaj klasę "widoczny" do widocznych paragrafów
            $("p:visible").addClass(\'widoczny\');
            console.log("Dodano klasę \'widoczny\' do widocznych paragrafów.");
        });
    </script>
</body>
</html>

Zadanie do samodzielnego wykonania

Stwórz formularz zawierający różne typy pól: input tekstowy, input typu checkbox (zaznaczony), input typu radio (niezaznaczony), przycisk (button) i pole textarea. Dodaj również kilka linków (<a>), niektóre z atrybutem target="_blank".

Używając selektorów jQuery:

  1. Wybierz wszystkie elementy input w formularzu i dodaj im cienką, szarą ramkę.
  2. Wybierz zaznaczony checkbox i zmień jego etykietę (jeśli ją ma obok) lub dodaj obok niego tekst "(Zaznaczono)".
  3. Wybierz wszystkie linki, które otwierają się w nowej karcie (target="_blank") i dodaj im klasę "link-zewnetrzny".

FAQ - Selektory jQuery

Czy selektory jQuery są wolniejsze niż natywne metody JavaScript (np. `getElementById`, `querySelectorAll`)?

W przeszłości selektory jQuery mogły być nieco wolniejsze, ale nowoczesne przeglądarki zoptymalizowały natywne metody, a jQuery często wykorzystuje je pod spodem (szczególnie dla prostszych selektorów CSS). Różnica w wydajności jest zazwyczaj nieznacząca dla większości zastosowań. jQuery oferuje za to wygodniejszą składnię i dodatkowe filtry.

Jak wybrać element, który właśnie został kliknięty?

Wewnątrz funkcji obsługi zdarzenia jQuery (np. click), możesz użyć $(this), aby odwołać się do elementu DOM, który wywołał zdarzenie, opakowanego w obiekt jQuery. Pozwala to na łatwe manipulowanie klikniętym elementem.

Czy mogę łączyć selektory jQuery z metodami przechodzenia po DOM?

Tak, to bardzo częsta praktyka. Po wybraniu początkowego zestawu elementów za pomocą selektora, możesz użyć metod takich jak .find(), .children(), .parent(), .siblings(), .next(), .prev(), aby precyzyjniej nawigować po drzewie DOM i wybrać powiązane elementy.

Co zwraca selektor jQuery, jeśli nic nie znajdzie?

Jeśli selektor jQuery nie znajdzie żadnych pasujących elementów, zwraca pusty obiekt jQuery (obiekt z właściwością length równą 0). Co ważne, nie zwraca null ani nie rzuca błędu. Możesz bezpiecznie wywoływać metody jQuery na pustym obiekcie – po prostu nic się nie stanie.

Czy wielkość liter w selektorach ma znaczenie?

W przypadku selektorów tagów HTML (np. div, p) wielkość liter zazwyczaj nie ma znaczenia. Jednak w przypadku selektorów ID, klas oraz wartości atrybutów, wielkość liter ma znaczenie, ponieważ odpowiadają one wartościom w kodzie HTML, które są wrażliwe na wielkość liter (case-sensitive).