Ankündigung

Einklappen
Keine Ankündigung bisher.

Javascipt substr() Problem

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Javascipt substr() Problem

    Hallo Leute

    Ich hoffe es hat hier jemand der mir bei meinem Problem mit Javascript helfen kann

    Aaaalso... ich entwickle gerade einen kleinen visuellen Editor zum einfügen von BBCodes in eine TextArea. Dazu verwende ich folgenden code:

    Code:
    function insertBBCode(strInputControlId, strBBCodeType)
    {
        var inputControl = document.getElementById(strInputControlId);
        
        var startTag = "[" + strBBCodeType + "]";
        var endTag = "[/" + strBBCodeType  + "]";
    
        var selection = getTextAreaSelection(inputControl);
        var text = inputControl.value;
        var textStart = text.substr(0, selection.start);
        var textEnd = text.substr(selection.end, text.length);
        var textMiddle = text.substr(selection.start, selection.end);
    
        inputControl.value = textStart + startTag + textMiddle + endTag + textEnd;
    }
    
    function getTextAreaSelection(el) {
        var start = 0, end = 0, normalizedValue, range,
            textInputRange, len, endRange;
    
        if (typeof el.selectionStart == "number" && typeof el.selectionEnd == "number") {
            start = el.selectionStart;
            end = el.selectionEnd;
        } else {
            range = document.selection.createRange();
    
            if (range && range.parentElement() == el) {
                len = el.value.length;
                normalizedValue = el.value.replace(/\r\n/g, "\n");
    
                // Create a working TextRange that lives only in the input
                textInputRange = el.createTextRange();
                textInputRange.moveToBookmark(range.getBookmark());
    
                // Check if the start and end of the selection are at the very end
                // of the input, since moveStart/moveEnd doesn't return what we want
                // in those cases
                endRange = el.createTextRange();
                endRange.collapse(false);
    
                if (textInputRange.compareEndPoints("StartToEnd", endRange) > -1) {
                    start = end = len;
                } else {
                    start = -textInputRange.moveStart("character", -len);
                    start += normalizedValue.slice(0, start).split("\n").length - 1;
    
                    if (textInputRange.compareEndPoints("EndToEnd", endRange) > -1) {
                        end = len;
                    } else {
                        end = -textInputRange.moveEnd("character", -len);
                        end += normalizedValue.slice(0, end).split("\n").length - 1;
                    }
                }
            }
        }
    
        return {
            start: start,
            end: end
        };
    }
    Mein Problem ist nun, dass textMiddle immer einen falschen Wert hat. selection.start und selection.end sind immer korrekt gesetzt, also muss es irgendwie an der Funktion substr() liegen. Habe schon min 1h damt verbracht den Fehler zu suchen, bin am verzweifeln...


    .
    EDIT (autom. Beitragszusammenführung) :

    RononDex schrieb nach 10 Stunden, 7 Minuten und 28 Sekunden:

    Hat sich erledigt, habe den Fehler gefunden...
    Der fehler lag (wie schon vermutet) an folgender Stelle:
    Code:
    var textMiddle = text.substr(selection.start, selection.end);
    Und zwar ist es so, dass Javascript in der Funktion substr() (entgegen dem standard anderer Programmiersprachen) als 2. Parameter nicht die Endposition, sondern die Länge erwartet...
    Also musste ich die Zeile wie folgt ändern:

    Code:
    var textMiddle = text.substr(selection.start, (selection.end - selection.start));
    Zuletzt geändert von RononDex; 04.02.2011, 20:00. Grund: Antwort auf eigenen Beitrag innerhalb von 24 Stunden!
    Projekt "3567: Project Longshot": --> http://projectgames.de/longshot/ <--

  • #2
    Zitat von RononDex Beitrag anzeigen
    Und zwar ist es so, dass Javascript in der Funktion substr() (entgegen dem standard anderer Programmiersprachen) als 2. Parameter nicht die Endposition, sondern die Länge erwartet...
    Eigentlich ist es von den bekannteren Programmiersprachen nur Java, die hier als 2. Parameter die Endposition will. C++, C#, Pascal, Basic, PHP und die meisten anderen Programmiersprachen, die ich kenne, wollen eigentlich die Länge des Strings als zweiten (je nach Sprache auch mal dritten) Parameter.
    Opa fuhr den Hasen tot und brät ihn zum Abendbrot. | Goodbye Galaxy!

    Kommentar

    Lädt...
    X