Ergebnis 1 bis 6 von 6
  1. #1
    Avatar von Arcsinh
    Arcsinh ist offline Kaiser
    registriert
    03-06-2010
    Beiträge
    1.392

    Komisches Verhalten

    Guten Abend,

    ich will ein Framework schreiben, dass die wichtigsten Funktionen beinhaltet. Das ist die vereinfachte Version:

    Code:
    // Die Funktion wurde vereinfacht, sie dient jetzt nur noch als Alternative für
    // document.getElementById
    function getElement(elem) {
        // Wenn elem = "#id"
        if((/^#\w+/g).exec(elem)) {
            return document.getElementById(elem.replace(/#/, ""));
        }
    }
    
    function _DOM(elems) {
        this.elements = [];
        for(var i=0; i<elems.length; i++) {
            var element = getElement(elems[i]);
            this.elements.push(element);
        }
        return this;
    }
    _DOM.prototype = {
        each : function(func) {
            for(var i=0; i<this.elements.length; i++) {
                func.call(this, this.elements[i]);
            }
            return this;
        },
        setStyle : function(prop, val) {
            this.each(function(elem) {
                elem.style[prop] = val;
            });
            return this;
        }
    };
    
    window.DOM = function() {
        return new _DOM(arguments);
    };
    Damit möchte ich nun mehrere divs eine rote Hintergrundfarbe geben. So sieht mein HTML-Bereich aus:

    HTML-Code:
    <style>
        #eins, #zwei, #drei, #vier, #fuenf {
            width: 100px; height: 100px;
            float: left;
            margin-right: 10px;
        }
    </style>
    <div id="eins"></div>
    <div id="zwei"></div>
    <div id="drei"></div>
    <div id="vier"></div>
    <div id="fuenf"></div>
    So schaut meine Anweisung aus:

    Code:
    DOM("#eins", "#zwei", "#drei", "#vier", "#fuenf").setStyle("backgroundColor", "red");
    Jedoch wirkt sich das nur auf meinem ersten div aus. Nach einigem ausprobieren hab ich festgestellt, dass der Fehler womöglich an der Funktion getElement liegt.

    Nachdem ich die Funktion um die dickgedruckte Zeile erweitert habe

    Code:
    function getElement(elem) {
        // Wenn elem = "#id"
        if((/^#\w+/g).exec(elem)) {
            console.log(document.getElementById(elem.replace(/#/, "")));
            return document.getElementById(elem.replace(/#/, ""));
        }
    }
    hat das Chromium-Entwicklertool folgendes ausgegeben:



    Keine Ahnung, wieso nur jedes zweite Element dort "wahrgenommen" wird.
    Bin dankbar, wenn mir jemand helfen kann!
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Goethe)

  2. #2
    Avatar von kkapsner
    kkapsner ist offline Super Moderator
    registriert
    28-03-2008
    Beiträge
    17.757

    AW: Komisches Verhalten

    Mich wundert's, dass überhaupt ein anderes Element als das erste angezeigt wird: dein _DOM erwartet als Parameter einen Array und nicht mehrere Parameter...

  3. #3
    Avatar von Arcsinh
    Arcsinh ist offline Kaiser
    registriert
    03-06-2010
    Beiträge
    1.392

    AW: Komisches Verhalten

    Durch

    Code:
    window.DOM = function() {
        return new _DOM(arguments);
    };
    werden alle Argumente übergeben, soweit ich das weiß.
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Goethe)

  4. #4
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Komisches Verhalten

    Das komische Verhalten kommt von der exec Funktion wegen dem g-Switch. JS speichert diese Ausdrücke zwischen - ich weiß nicht genau was warum da passiert, aber die Lösung wäre:

    Code:
    function getElement(elem) {
        // Wenn elem = "#id"
        if(/^#\w/.test(elem)) {
            return document.getElementById(elem.replace(/#/, ""));
        }
    }

  5. #5
    ein schlauer ist offline Lounge-Member
    registriert
    18-08-2004
    Beiträge
    14.671

    AW: Komisches Verhalten

    Ich glaub dieser Blogeintrag beschreibt das Problem: http://blog.thatscaptaintoyou.com/st...al-regex-flag/

    Edit: und noch was - das könnte für dich interessant sein: http://www.dustindiaz.com/roll-out-your-own-interface/

    EDIT 2: Ich sehe,du kennst den Eintrag schon
    Geändert von ein schlauer (15-10-2010 um 00:35 Uhr)

  6. #6
    Avatar von Arcsinh
    Arcsinh ist offline Kaiser
    registriert
    03-06-2010
    Beiträge
    1.392

    AW: Komisches Verhalten

    Vielen, vielen Dank...es klappt endlich!
    Oh man, wäre fast verzweifelt daran

    Zu EDIT 2: Ja, hab mich dadurch inspirieren lassen
    Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Goethe)

Ähnliche Themen

  1. Antworten: 3
    Letzter Beitrag: 14-12-2009, 20:28
  2. Komisches verhalten des PopUp
    Von xplox im Forum JavaScript
    Antworten: 4
    Letzter Beitrag: 02-09-2009, 16:52
  3. window.open und PDF: komisches Verhalten
    Von KMueller im Forum JavaScript
    Antworten: 2
    Letzter Beitrag: 01-08-2008, 01:38
  4. Komisches Verhalten im IE?
    Von Schnuckenpapa im Forum CSS und (X)HTML
    Antworten: 4
    Letzter Beitrag: 23-11-2006, 12:56
  5. komisches phänomen
    Von Liz im Forum CSS und (X)HTML
    Antworten: 24
    Letzter Beitrag: 20-06-2006, 14:53

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •