Öğeleri seçme
Fırın rafında bir başlık ve üç fiş durur. Başlık Rye der. Fişler vardiyayı yazar: Morning, Noon, Evening. Son fişin bir de sold sınıfı vardır. Raf, id’si shelf olan bir main öğesidir. İçinde id’si loaf olan bir h2, ardından sınıfı tag olan üç p vardır. Seçmek, canlı belgeden bu düğümleri senin koyduğun adla istemektir. document.getElementById("loaf") başlığı döndürür ve metni Rye’dir. document.getElementsByClassName("tag") uzunluğu 3 olan canlı bir liste döndürür. document.querySelector(".tag") ilk fişi döndürür, yani Morning. document.querySelectorAll(".tag") sabit bir liste döndürür ve 1. konum Noon’dur. Rafın hiç yazmadığı ad, querySelector için null, querySelectorAll için uzunluğu 0 olan bir listedir.
Beş çağrı, ağaçta aşağı inmek değil
DOM sayfası bir başlığın atasını adlandırıyor ve öğe çocuklarını bütün düğümlerle sayıyordu. Bu sayfa parentElement, nextElementSibling ve children okumaz, Math da çağırmaz. Ağaç zaten duruyor. Burada hangi çağrının tek düğüm, hangisinin liste verdiğini ve hangi sonucun hiçbir şeyin uymadığını söylediğini ayırırsın.
Her çağrı ne döndürür
Sayıyı yalnızca başlık ile üç fişin durduğu rafta al. Aşağıdaki okuma dosyası bir paragraf daha ekler, bu yüzden orada p sayısı değişir.
📊 Her çağrı ne döndürür
| Çağrı | Ne gelir | Bu rafta | Kolay karışır |
|---|---|---|---|
getElementById("loaf") |
bir öğe ya da null |
başlık metni Rye | konumdan okunacak bir liste |
getElementsByClassName("tag") |
canlı HTMLCollection |
uzunluk 3 | noktayı yazmak, .tag gibi |
getElementsByTagName("p") |
canlı HTMLCollection |
uzunluk 3 | başlığın kendisi, o bir h2 |
querySelector(".tag") |
ilk eşleşme ya da null |
Morning fişi | bütün fişler |
querySelectorAll(".tag") |
statik NodeList |
uzunluk 3; 1. konum Noon | canlı bir koleksiyon |
querySelectorAll(".oven") |
boş NodeList |
uzunluk 0 | null |
Sınıf metodu ile CSS seçicisi noktayı aynı yazmaz. getElementsByClassName("tag") çıplak tag adını ister. getElementsByClassName(".tag") adı gerçekten .tag olan bir sınıf arar ve uzunluk 0 döndürür. querySelector CSS ister, nokta .tag üzerinde kalır. querySelector("tag") etiket adı tag olan bir öğe arar, bulamaz ve null döndürür. 0. konum ilk fiştir. 1. konum Noon’dur. getElementsByClassName listesi canlıdır: sonraki sayfa bir tag fişi daha eklerse uzunluk büyür. querySelectorAll çağrı anındaki uzunluğu tutar. Evening iki sınıf taşır, tag ve sold; uzunluğu 3 olan listenin içindedir ve sold için tek eşleşmedir.
Bir id, bir öğe
Bir id sayfada tek olmalıdır. getElementById o tek öğeyi döndürür; id yoksa null gelir. Liste döndürmez. Bu metot yalnızca document üzerindedir, öğenin kendisinde değil.
let loaf = document.getElementById("loaf");
console.log(loaf.textContent);
console.log(loaf === null);
İlk satır Rye. İkinci satır false, çünkü başlık rafta duruyor. İki öğe loaf id’sini paylaşsa bile çağrı belgedeki ilkini döndürür.
Sınıf adı ve etiket adı
İki çağrı da canlı bir HTMLCollection döndürür. Tek fiş almadan önce length oku. Sayım dört öğelik raftadır, okuma dosyasında değil.
console.log(document.getElementsByClassName("tag").length);
console.log(document.getElementsByTagName("p").length);
console.log(document.getElementsByClassName("sold").length);
Satırlar 3, 3 ve 1. Üç fiş tag sınıfını paylaşır. Üçü de p öğesidir, başlık ise h2 olduğu için bu rafta etiket sayısı sınıf sayısıyla aynıdır. Yalnızca Evening’de sold vardır. getElementsByClassName(".tag") başka bir çağrıdır: nokta sınıf adının parçası değildir, o uzunluk 0 olur.
İlk CSS eşleşmesi
querySelector tek öğe döndürür, belge sırasındaki ilkini, ya da null.
console.log(document.querySelector(".tag").textContent);
console.log(document.querySelector("#shelf .sold").textContent);
İlk satır Morning. İkinci satır Evening. #shelf .sold, rafın kendisi değil, rafın içindeki sold sınıflı öğe demektir. document.getElementById("shelf").querySelector(".sold") aramayı raftan başlatır ve aynı Evening fişine iner.
Bütün eşleşmeler, sonra konum
querySelectorAll her eşleşmeyi statik bir NodeList içinde döndürür. Liste boş olabilir. Kendisi null değildir.
let tags = document.querySelectorAll(".tag");
console.log(tags.length);
console.log(tags[1].textContent);
Uzunluk 3. 1. konum Noon. 0. konum Morning, 2. konum Evening. Sonraki bir betik fiş eklerse bu liste büyümez. getElementsByClassName("tag") ile gelen HTMLCollection büyür. Biri o anın fotoğrafıdır, öteki canlı kalır.
Rafın yazmadığı bir ad
Dosyada olmayan bir id ve bir sınıf iste.
console.log(document.getElementById("oven"));
console.log(document.querySelector(".oven"));
console.log(document.querySelectorAll(".oven").length);
İlk satır null. İkinci satır null. Üçüncü satır 0. Hiçbir şey uymasa da querySelectorAll bir liste döndürür; uzunluk 0’dır ve listenin kendisi null değildir. getElementById döndürecek bir liste tutmaz, bu yüzden ıskalama null olur, 0 değil.
Sayfada bir satır
Bir paragraf kaç tag fişi olduğunu, ilk fişi ve sold fişini söyler. Betik body’nin sonundadır, öğeler varken. Satır paragrafının tag sınıfı yoktur, bu yüzden üç fişten biri değildir.
<!DOCTYPE html>
<html>
<head>
<title>selecting — page</title>
</head>
<body>
<main id="shelf">
<h2 id="loaf">Rye</h2>
<p class="tag">Morning</p>
<p class="tag">Noon</p>
<p class="tag sold">Evening</p>
<p id="line">…</p>
</main>
<script>
let tags = document.querySelectorAll(".tag");
let line = document.getElementById("line");
line.textContent = tags.length + " / " + tags[0].textContent + " / " + document.querySelector(".sold").textContent;
</script>
</body>
</html>
Paragraf 3 / Morning / Evening yazar. Bu dosyada getElementsByTagName("p") 4 sayar, çünkü satır bir p dahadır. querySelectorAll(".tag") yine 3 sayar. Sonraki sayfa, bu çağrıların çoktan bulduğu öğelerin HTML’ini değiştirir.
Rafı denetle
- Başlık metnini yazdır, Rye bekle; sonra null denetimi ve false bekle
- Sınıf uzunluğunu,
puzunluğunu ve sold uzunluğunu yazdır: 3, 3 ve 1 - İlk
.tagmetnini yazdır, Morning bekle; sonra#shelf .soldve Evening bekle querySelectorAlluzunluğunu yazdır, 3 bekle; 1. konum Noon olmalı- Olmayan id’yi ve olmayan
querySelectorçağrısını yazdır; ikisi de null querySelectorAll(".oven").lengthyazdır ve 0 bekle- Paragrafı oku ve 3 / Morning / Evening bekle
Yanlış çağrı
Sayfa açık kalır. Yazdığın çağrı başka bir şey istemiştir.
.tagdeğerinigetElementsByClassNameiçine vermek; nokta yalnızca CSS seçicisine aittir- Noktasız
tagdeğeriniquerySelectoriçine verip fişleri beklemek -
- konumu ilk fiş sanmak
querySelectorAllıskasınınullsaymak; uzunluk 0’dırgetElementByIdıskasını uzunluğu 0 olan liste saymak- Okuma dosyasında
getElementsByTagName("p")sayıp 3 beklemek HTMLCollectionüzerinde.mapçağırmak; bu bir dizi değildir- Bu sayfada
parentElementokumak; o, ağaç sayfasının işiydi
Yanında götür
getElementByIdbir öğe döndürür ya danullgetElementsByClassNamevegetElementsByTagNamecanlı birHTMLCollectiondöndürür- Sınıf metodu
tagister,.tagdeğil querySelectorilk CSS eşleşmesini döndürür ya danullquerySelectorAllstatik birNodeListdöndürür; ıskanın uzunluğu 0’dır-
- konum Morning, 1. konum Noon
- Sonraki sayfa, seçtiğin öğelerin HTML’ini değiştirir
🧠 Bilginizi Test Edin
Bilginizi Test Edin
Bu interaktif sınavla kendini test et ve konuyu ne kadar iyi anladığını gör
📝 Talimatlar
- Her soruyu dikkatle okuyun
- Her soru için en iyi cevabı seçin
- Quiz'i istediğiniz kadar tekrar alabilirsiniz
- İlerlemeniz üstte gösterilecek