JavaScript: Bibliothek - Find Text mit Objekt
Ich möchte jetzt unsere bib_oop.js um die oben vorgestellte Funktion erweitern:
findTxt()
Rufen wir uns nochmals kurz in Erinnerung wie unser Objekt arbeitet:
function getObj(){
// die Methode elem übernimmt an dieser Stelle die Arbeit
this.elem = function( identifier ) {
// Element speichern
const myElem = document.querySelectorAll( identifier );
// Rückgabe des Elementes
if ( myElem.length === 1 ) {
// Element ist eindeutig => ID oder
// es wurde nur ein Element gefunden
return myElem[0];
} else {
// Mehrere Elemente vorhanden => Rückgabe Array
return myElem;
}
};
...
}
// Initialisierung
const bib = new getObj();
Jetzt erweitern wir unser Objekt bib um die Methode findTxt()
function getObj(){
...
// START::: Find TXT
this.findTxt = function(myroot, text){
const root = this.elem(myroot);
const results = []; // Array für Treffer
// Rekursion starten
const walker = document.createTreeWalker(
root, // Start der Suche
NodeFilter.SHOW_TEXT, // durchsucht Text-Knoten
null, // Platzhalter für zusätzliche Filterregeln
false
);
let node;
// Solange unterhalb des Startelementes "walker" Nodes zu finden sind
while( node = walker.nextNode() ){
// Wenn Suchbegriff gefunden wurde in results pushen
if( node.textContent.includes(text) ){
// Nodes pushen
results.push(node.parentElement);
}
}
return results;
}
// ENDE::: Find TXT
}
// Initialisierung
const bib = new getObj();
Sehen wir uns nun den Aufruf unserer Methode an:
bib.findTxt( Selektor, Suchbegriff);
Jetzt wo wir das angepasst haben sehen wir uns abermals die Auswertung an.
// Ausführen const textNodes = bib.findTxt( '#wrapper' , 'Suchbegriff'); // Array auslesen textNodes.forEach( el => { // Ausgabe für id's el.id; ... // Ausgabe für ClassName el.className; ... // Do somthing });
Wenn Ihr Anregungen oder Kommentare habt, seid so nett und kontaktiert mich unter: Kontakt
Kopiert Euch gerne den Code und probiert es aus: Code
Kopiert Euch die gesamte bib_oop.js als bib_oop.txt: Code
schenken solltest.
Gib uns alle Eletern-Elemente aus für:
Code
HTML: <div id="wrapper" class="my-wrapper"> Das ist ein Beispieltext <div id="ebene-1" class="cl-ebene-1"> dem Du <span id="span-eins" class="sp-eins">bitte keine</span> Beachtung <p id="p-1" class="p-1">schenken solltest.</p> <div id="ebene-2" class="eb-2"> Aber in diesem Beispieltext <span id="span-zwei" class="new-class">kannst Du auch</span> den Text finden. </div> </div> </div> <p class="my-fett"> Gib uns alle Eletern-Elemente aus für: </p> <form name="skillflow"> <p> Suchbegriff:<br> <select id="suche"> <option value="Beispieltext">Beispieltext</option> <option value="Du">Du</option> <option value="bitte">bitte</option> <option value="schenken">schenken</option> <option value="finden">finden</option> </select> </p> <p> Ausgabe:<br> <select id="selector"> <option value="id">id</option> <option value="className">className</option> </select> </p> </form> <div id="target"> <span>Ausgabe:</span><br> <div id="ausgabe" class="fett commentar"></div> </div> </div> <br> <button id="buttonid" class="ancor_button" name="buttonname" onclick="newAusgabe()">Ausgeben</button>
CSS: .example-wrapper select, .example-wrapper option{ color: var(--black) !important; } .my-fett{ font-weight: 600; color: rgba(112, 175, 4, 1) !important; }
JavaScript: bib_oop.js: /* START::: getObj() */ function getObj(){ // die Methode elem übernimmt an dieser Stelle die Arbeit this.elem = function( identifier ) { // Element speichern const myElem = document.querySelectorAll( identifier ); // Rückgabe des Elementes if ( myElem.length === 1 ) { // Element ist eindeutig => ID oder // es wurde nur ein Element gefunden return myElem[0]; } else { // Mehrere Elemente vorhanden => Rückgabe Array return myElem; } }; /* ENDE::: getObj() */ ... /* START::: Finde-Text */ this.findTxt = function(myroot, text){ const root = this.elem(myroot); const results = []; // Array für Treffer // Rekursion starten const walker = document.createTreeWalker( root, // Start der Suche NodeFilter.SHOW_TEXT, // durchsucht Text-Knoten null, // Platzhalter für zusätzliche Filterregeln false ); let node; // Solange unterhalb des Startelementes "walker" Nodes zu finden sind while( node = walker.nextNode() ){ // Wenn Suchbegriff gefunden wurde in results pushen if( node.textContent.includes(text) ){ // Nodes pushen results.push(node.parentElement); } } return results; } /* ENDE::: Finde-Text */ } // Initialisierung const bib = new getObj();
JavaScript OOP: function newAusgabeOOP(){ // Auslesen der Options const myNewTx = bib.elem( '#suche' ).value; const myNewSel = bib.elem( '#selector' ).value; // Ausführen const textNodes = bib.findTxt( '#wrapper', myNewTx ); let myNewAusgabe = ''; // Array auslesen textNodes.forEach( el => { if(myNewSel === 'id'){ // Ausgabe für id's myNewAusgabe += el.id+'
'; }else{ // Ausgabe für ClassName myNewAusgabe += el.className+'<br>'; } }); bib.elem('#ausgabe').innerHTML = myNewAusgabe; }