Kann ich in querySelectorAll einen regulären Ausdruck verwenden?

Lesezeit: 3 Minuten

Auf einer Seite, die ich mache, werde ich mit Gewohnheit enden link Elemente wie diese:

<link rel="multiply" type="service/math" src="https://stackoverflow.com/questions/16791527/path/to/service">
<link rel="substract" type="service/math" src="https://stackoverflow.com/questions/16791527/path/to/service">
...

Ich versuche zu verwenden querySelectorAll um alle Link-Elemente mit einem Typ abzurufen service/... angegeben und komme nirgendwo hin.

Momentan wähle ich das aus:

root.querySelectorAll('link');

was mir alles gibt <link> Elemente, wenn ich nur diejenigen mit Typ möchte service/.*

Fragen:

Kann ich einem QSA-Selektor eine Regex hinzufügen? Wenn ja, wie geht das?

  • Schauen Sie sich diese Antwort an stackoverflow.com/a/38711853/7250868

    – Ramil Schawaljew

    21. September 2020 um 9:39 Uhr

Benutzeravatar von Benjamin Grünbaum
Benjamin Grünbaum

Sie können einen regulären Ausdruck nicht wirklich in einem Selektor verwenden, aber CSS-Selektoren sind leistungsfähig genug für Ihre Anforderungen mit einer von regulären Ausdrücken inspirierten „beginnt mit“-Syntax.

Sie können einen Substring-Matching-Attributselektor verwenden: link[type^=service]

Liest “Knoten des Typs link mit einem Attribut type beginnend mit “Dienst”

Von dem formale Spezifikation:

[att^=val]

Stellt ein Element mit dem att-Attribut dar, dessen Wert mit dem Präfix „val“ beginnt. Wenn “val” die leere Zeichenfolge ist, stellt der Selektor nichts dar.

Funktionierendes JSFiddle

  • @häufig gerne geschehen! Für das, was es wert ist, a .filter Aufruf durch die Elemente, die ihre Typeneigenschaft überprüfen, ist imho auch eine vollkommen gültige Lösung.

    – Benjamin Grünbaum

    28. Mai 2013 um 12:11 Uhr

  • Dies ist nützlich, um zu versuchen, mithilfe der Controller-As-Syntax in Angular JS 1.5+ Zugriff auf eine Controller-Instanz zu erhalten. Dies ist genau die Antwort, die ich brauchte, als ich meine Winkel-App mit der Controller-as-Syntax aktualisierte und Zugriff auf Konsolenebene auf ihre Bereiche haben wollte: angular.element( document.querySelectorAll( '[ng-controller^="' + <controller name> + '"' )[0] ).scope

    – Jusopi

    25. Februar 2015 um 3:51 Uhr


Benutzeravatar von SUM1
SUMME1

Ich weiß, das ist 7 Jahre alt, aber so machst du es (für Attributwerte):

function DOMRegex(regex) {
    let output = [];
    for (let i of document.querySelectorAll('*')) {
        if (regex.test(i.type)) { // or whatever attribute you want to search
            output.push(i);
        }
    }
    return output;
}
console.log(DOMRegex(/^service\//)); // your regex here
<link rel="multiply" type="service/math" src="https://stackoverflow.com/questions/16791527/path/to/service">
<link rel="substract" type="service/math" src="https://stackoverflow.com/questions/16791527/path/to/service">
<link rel="test" type="notservice/math" src="path/to/notservice">
<div id="some-other-node"></div>

Suchen alle Elementattribute können Sie dies verwenden:

function DOMRegex(regex) {
    let output = [];
    for (let i of document.querySelectorAll('*')) {
        for (let j of i.attributes) {
            if (regex.test(j.value)) {
                output.push({
                    'element': i,
                    'attribute name': j.name,
                    'attribute value': j.value
                });
            }
        }
    }
    return output;
}
console.log(DOMRegex(/(?<!t)service/)); // your regex here
<link rel="multiply" type="service/math" src="https://stackoverflow.com/questions/16791527/path/to/service">
<link rel="substract" type="service/math" src="https://stackoverflow.com/questions/16791527/path/to/service">
<link rel="test" type="notservice/math" src="path/to/notservice">
<div id="some-other-node"></div>

Ich habe es für Sie in ein schönes Objektlayout gesteckt.

Der Beitrag ist ziemlich alt, aber vielleicht hilft er jemandem weiter. Wenn like -Klausel benötigt wird und wir nicht nur nach dem Start suchen möchten, kann die folgende Syntax verwendet werden:

document.querySelectorAll('[type*=service]');

1438290cookie-checkKann ich in querySelectorAll einen regulären Ausdruck verwenden?

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy