Warum führt die Funktion previous() keine Schleife durch, wenn der Suchbegriff das erste Wort in einem Textbereich ist?HTML

HTML-Programmierer
Guest
 Warum führt die Funktion previous() keine Schleife durch, wenn der Suchbegriff das erste Wort in einem Textbereich ist?

Post by Guest »

Ich habe einen einfachen Texteditor, mit dem der Benutzer nach einem Begriff im Text suchen und zum nächsten oder vorherigen Vorkommen navigieren kann. Das Problem, mit dem ich konfrontiert bin, besteht darin, dass, wenn der Suchbegriff ganz am Anfang des Textbereichs steht (z. B. das erste Wort „Love“), durch Drücken der Schaltfläche „Zurück“ nicht zum letzten Vorkommen zurückgesprungen wird . Dies funktioniert jedoch gut, wenn der Suchbegriff nicht am Anfang des Textes steht (z. B. bei der Suche nach dem Begriff „nie“).
Hier ist der relevante Code:

Code: Select all

let currentMatchIndex = -1; // Tracks the current match index

function resetIndex() {
currentMatchIndex = -1;
}

function highlightMatch(startIndex, endIndex) {
const textarea = document.getElementById('myTextarea');
textarea.setSelectionRange(startIndex, endIndex);
textarea.focus();
}

function next() {
const findTerm = document.getElementById('findInput').value;
const textarea = document.getElementById('myTextarea');
const text = textarea.value;

if (findTerm) {
const startIndex = text.indexOf(findTerm, currentMatchIndex + 1);
if (startIndex !== -1) {
currentMatchIndex = startIndex;
} else {
currentMatchIndex = text.indexOf(findTerm); // Loop back to first occurrence
}

if (currentMatchIndex !== -1) {
highlightMatch(currentMatchIndex, currentMatchIndex + findTerm.length);
} else {
alert("Find term not found.");
}
}
}

function previous() {
const findTerm = document.getElementById('findInput').value;
const textarea = document.getElementById('myTextarea');
const text = textarea.value;

if (findTerm) {
const startIndex = text.lastIndexOf(findTerm, currentMatchIndex - 1);
if (startIndex !== -1) {
currentMatchIndex = startIndex;
} else {
currentMatchIndex = text.lastIndexOf(findTerm); // Loop to last occurrence
}

if (currentMatchIndex !== -1) {
highlightMatch(currentMatchIndex, currentMatchIndex + findTerm.length);
} else {
alert("Find term not found.");
}
}
}

Code: Select all

Next
Previous
Love never dies. Love never dies. Love never dies.


Problem
Bei der Suche Wenn der Begriff das erste Wort im Textbereich ist (z. B. „Love“) und ich auf die Schaltfläche „Zurück“ klicke, wird nicht zum letzten Vorkommen zurückgesprungen. Wenn ich jedoch nach einem Begriff wie „nie“ suche, funktioniert es einwandfrei und führt wie erwartet eine Schleife aus.
Erwartetes Verhalten
  • < li>Wenn die Schaltfläche „Weiter“ gedrückt wird, wird das nächste Vorkommen gesucht.
  • Wenn die Schaltfläche „Vorherige“ gedrückt wird, wird eine Schleife zum letzten Vorkommen ausgeführt, wenn die erste Übereinstimmung erreicht wird.
Hat jemand Sind Sie schon einmal auf dieses Problem gestoßen oder wissen, wie Sie es beheben können? Ich suche nach einer robusten Lösung, die die Behandlung von Grenzfällen und Ausnahmen mit mehreren bedingten Anweisungen vermeidet.

Quick Reply

Change Text Case: 
   
  • Similar Topics
    Replies
    Views
    Last post