Dokument: querySelector() Methode
Baseline
Weitgehend verfügbar
Diese Funktion ist gut etabliert und funktioniert auf vielen Geräten und in vielen Browserversionen. Sie ist seit Juli 2015 browserübergreifend verfügbar.
Die Document-Methode querySelector() gibt das erste Element im Dokument zurück, das mit dem angegebenen CSS-Selektor oder einer Gruppe von CSS-Selektoren übereinstimmt. Wenn keine Übereinstimmungen gefunden werden, wird null zurückgegeben.
Die Übereinstimmung erfolgt durch eine tiefenorientierte Vorab-Durchlauf der Knoten des Dokuments, beginnend mit dem ersten Element im Markup des Dokuments und iterierend durch sequenzielle Knoten in der Reihenfolge der Anzahl der Kindelemente.
Wenn der angegebene Selektor einer ID entspricht, die fälschlicherweise mehr als einmal im Dokument verwendet wird, wird das erste Element mit dieser ID zurückgegeben.
CSS-Pseudoelemente werden niemals irgendwelche Elemente zurückgeben.
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; andernfalls wird eine
SyntaxError-Ausnahme ausgelöst.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, müssen Sie ihn vor der Verwendung in einem Selektor escapen, entweder indem SieCSS.escape()auf den Wert anwenden oder indem Sie eine der in Escaping characters beschriebenen Techniken verwenden. Siehe Escaping attribute values für ein Beispiel.
Rückgabewert
Ein Element-Objekt, das das erste Element im Dokument darstellt, das mit dem angegebenen Satz von CSS-Selektoren übereinstimmt, oder null, wenn keine Übereinstimmungen vorliegen.
Wenn Sie eine Liste aller mit den angegebenen Selektoren übereinstimmenden Elemente benötigen, sollten Sie stattdessen querySelectorAll() verwenden.
Ausnahmen
SyntaxErrorDOMException-
Wird ausgelöst, wenn die Syntax der angegebenen selectors ungültig ist.
Beispiele
>Finden des ersten Elements, das mit einer Klasse übereinstimmt
In diesem Beispiel wird das erste Element im Dokument mit der Klasse myclass zurückgegeben:
const el = document.querySelector(".myclass");
Komplexe Selektoren
Selektoren können auch sehr leistungsfähig sein, wie im folgenden Beispiel gezeigt wird. Hier wird das erste <input>-Element mit dem Namen "login" (<input name="login"/>) gefunden, das sich innerhalb eines <div> befindet, dessen Klasse "user-panel main" ist (<div class="user-panel main">) im Dokument:
const el = document.querySelector("div.user-panel.main input[name='login']");
Negation
Da alle CSS-Selektor-Strings gültig sind, können Sie auch Selektoren negieren:
const el = document.querySelector(
"div.user-panel:not(.main) input[name='login']",
);
Dies wählt ein Eingabeelement mit einem übergeordneten div mit der Klasse user-panel, aber nicht der Klasse main.
Escaping von Attributwerten
Dieses Beispiel zeigt, dass, wenn ein HTML-Dokument eine id enthält, die kein gültiger CSS-Bezeichner ist, wir den Attributwert escapen müssen, bevor wir ihn in querySelector() verwenden.
HTML
Im folgenden Code hat ein <div>-Element eine id von "this?element", die kein gültiger CSS-Bezeichner ist, weil das Zeichen "?" in CSS-Bezeichnern nicht erlaubt ist.
Es gibt auch drei Schaltflächen und ein <pre>-Element zur Protokollierung von Fehlern.
<div id="this?element"></div>
<button id="no-escape">No escape</button>
<button id="css-escape">CSS.escape()</button>
<button id="manual-escape">Manual escape</button>
<pre id="log"></pre>
CSS
div {
background-color: blue;
margin: 1rem 0;
height: 100px;
width: 200px;
}
JavaScript
Alle drei Schaltflächen versuchen beim Klicken, das <div> auszuwählen und dann seine Hintergrundfarbe auf einen zufälligen Wert zu setzen.
- Die erste Schaltfläche verwendet den Wert
"this?element"direkt. - Die zweite Schaltfläche escaped den Wert mit
CSS.escape(). - Die dritte Schaltfläche escaped das Zeichen
"?"explizit mit einem Backslash. Beachten Sie, dass wir auch den Backslash selbst escapen müssen, mit einem weiteren Backslash, wie:"\\?".
const log = document.querySelector("#log");
function random(number) {
return Math.floor(Math.random() * number);
}
function setBackgroundColor(id) {
log.textContent = "";
try {
const element = document.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
Das Klicken auf die erste Schaltfläche gibt einen Fehler, während die zweite und dritte Schaltfläche ordnungsgemäß funktionieren.
Spezifikationen
| Spezifikation |
|---|
| DOM> # ref-for-dom-parentnode-queryselector①> |