Element: querySelector()-Methode
Baseline Widely available
This feature is well established and works across many devices and browser versions. It’s been available across browsers since July 2015.
Die querySelector()
-Methode der Element
-Schnittstelle gibt das erste Element zurück, das ein Nachfahre des Elements ist, auf welchem sie aufgerufen wird und das mit der angegebenen Gruppe von Selektoren übereinstimmt.
Syntax
querySelector(selectors)
Parameter
selectors
-
Ein String, der einen oder mehrere Selektoren enthält, die übereinstimmen sollen. Dieser String muss ein gültiger CSS-Selektor-String sein. Ist er das nicht, wird eine
SyntaxError
-Ausnahme geworfen.Beachten Sie, dass die HTML-Spezifikation nicht verlangt, dass Attributwerte gültige CSS-Bezeichner sind. Wenn ein
class
- oderid
-Attributwert kein gültiger CSS-Bezeichner ist, dann müssen Sie ihn escapen, bevor Sie ihn in einem Selektor verwenden. Entweder durch Aufrufen vonCSS.escape()
auf den Wert oder unter Verwendung einer der Techniken, die in Escaping characters beschrieben sind. Siehe Escaping attribute values für ein Beispiel.
Rückgabewert
Das erste Nachfahr-Element von baseElement
, das mit der angegebenen Gruppe von selectors
übereinstimmt. Die gesamte Hierarchie der Elemente wird berücksichtigt, wenn Übereinstimmungen gesucht werden, einschließlich der Elemente außerhalb des Sets von baseElement
und seinen Nachfahren. Mit anderen Worten, selectors
wird zuerst auf das gesamte Dokument angewendet, nicht auf das baseElement
, um eine anfängliche Liste potenzieller Elemente zu generieren. Die resultierenden Elemente werden dann untersucht, um festzustellen, ob sie Nachfahren von baseElement
sind. Das erste übereinstimmende dieser verbleibenden Elemente wird von der querySelector()
-Methode zurückgegeben.
Wenn keine Übereinstimmungen gefunden werden, ist der zurückgegebene Wert null
.
Ausnahmen
SyntaxError
DOMException
-
Wird geworfen, wenn die angegebenen
selectors
ungültig sind.
Beispiele
Sehen wir uns ein paar Beispiele an.
Finden eines spezifischen Elements mit spezifischen Attributwerten
Direkte Nachfahren mit der :scope-Pseudoklasse abrufen
Dieses Beispiel verwendet die :scope
-Pseudoklasse, um direkte Kinder des parentElement
-Elements abzurufen.
HTML
Page Title
Love is Kind.
Love is Patient.
Love is Selfless.
CSS
span {
display: block;
margin-bottom: 5px;
}
.red span {
background-color: red;
padding: 5px;
}
JavaScript
const parentElement = document.querySelector("#parent");
let allChildren = parentElement.querySelectorAll(":scope > span");
allChildren.forEach((item) => item.classList.add("red"));
Ergebnis
Die gesamte Hierarchie zählt
Dieses Beispiel zeigt, dass die Hierarchie des gesamten Dokuments berücksichtigt wird, wenn selectors
angewendet werden, sodass Ebenen außerhalb des angegebenen baseElement
bei der Suche nach Übereinstimmungen dennoch einbezogen werden.
HTML
Original content
inside paragraph
inside span
inside paragraph
Output
JavaScript
const baseElement = document.querySelector("p");
document.getElementById("output").textContent =
baseElement.querySelector("div span").textContent;
Ergebnis
Das Ergebnis sieht folgendermaßen aus:
Beachten Sie, dass der Dieses Beispiel zeigt, dass, wenn ein HTML-Dokument eine In dem folgenden Code hat ein Wir haben auch drei Buttons und ein Alle drei Buttons versuchen beim Klicken, das Das Klicken auf den ersten Button führt zu einem Fehler, während die zweiten und dritten Buttons ordnungsgemäß funktionieren. Siehe "div span"
-Selektor immer noch das -Element erfolgreich findet, auch wenn die Knoten des
baseElement
keine Escaping von Attributwerten
id
enthält, die kein gültiger CSS-Bezeichner ist, wir den Attributwert escapen müssen, bevor wir ihn in querySelector()
verwenden.HTML
id
namens "this?element"
, die kein gültiger CSS-Bezeichner ist, da das "?"
-Zeichen in CSS-Bezeichnern nicht erlaubt ist.
-Element zum Protokollieren von Fehlern.
CSS
div {
background-color: blue;
margin: 1rem 0;
height: 100px;
width: 200px;
}
JavaScript
"this?element"
direkt.CSS.escape()
."?"
-Zeichen explizit mit einem Backslash. Beachten Sie, dass wir auch den Backslash selbst mit einem weiteren Backslash escapen müssen, wie: "\\?"
.const container = document.querySelector("#container");
const log = document.querySelector("#log");
function random(number) {
return Math.floor(Math.random() * number);
}
function setBackgroundColor(id) {
log.textContent = "";
try {
const element = container.querySelector(`#${id}`);
const randomColor = `rgb(${random(255)} ${random(255)} ${random(255)})`;
element.style.backgroundColor = randomColor;
} catch (e) {
log.textContent = e;
}
}
document.querySelector("#no-escape").addEventListener("click", () => {
setBackgroundColor("this?element");
});
document.querySelector("#css-escape").addEventListener("click", () => {
setBackgroundColor(CSS.escape("this?element"));
});
document.querySelector("#manual-escape").addEventListener("click", () => {
setBackgroundColor("this\\?element");
});
Ergebnis
Weitere Beispiele
Document.querySelector()
für zusätzliche Beispiele des korrekten Formats für die selectors
.Spezifikationen
Specification DOM
# ref-for-dom-parentnode-queryselectorall①Browser-Kompatibilität
Siehe auch
Element.querySelectorAll()
Document.querySelector()
und
Document.querySelectorAll()
DocumentFragment.querySelector()
und
DocumentFragment.querySelectorAll()
element.closest()
und
element.matches()
.