2012-04-05 7 views
0

Ich glaube, ich stoße in ein "Kontext" Problem und hoffe, dass jemand mehr Licht auf das Thema werfen kann.Javascript/jQuery Scoping und Kontext Problem beim Versuch, die "Referenz" eines Objekts zu manipulieren

Ich möchte die Quelle aller Bilder auf einer Seite entfernen. Ich habe für jedes Bild eine Reihe von Objekten erstellt. Wenn ich die Quelle verberge, möchte ich, dass die Änderungen in Echtzeit angezeigt werden, ohne dass meine ursprünglichen Objekteigenschaften beeinträchtigt werden. Ich möchte die Bilder (auf dem Bildschirm) bei einem Klickereignis bearbeiten.

Zum Beispiel:

$('#moz_iframe').contents().find("img").each(function(index){ 
    aryImageObjects.push(new imageObject($(this), $('#iframeHolder'))); 
}); //end each 

...

function imageObject(objImg, objHolder) { 
    this.objImg = objImg; 
    this.imgSrc = objImg.attr('src'); 
    //this.objImg.replaceWith('hrm'); <-- this works just fine in this context 
}; //end constructor 

... aber das funktioniert nicht:

$('#imagesOff').click(function(){ 
    for (i=0; i<aryImageObjects.length; i++) { 
     aryImageObjects[i].objImg.replaceWith('hrm'); 
    }; 
}); //end imagesOff click function 

Ich habe auch versucht, eine Objektmethode Aufbau innerhalb Mein ursprünglicher Konstruktor:

this.hideImages = function() { 
    this.objImg.replaceWith('hrm'); 
    }; 

...

$('#imagesOff').click(function(){ 
    for (i=0; i<aryImageObjects.length; i++) { 
     aryImageObjects[i].hideImages(); 
    }; 
}); //end imagesOff click function 

Aber das scheint nicht zu funktionieren.

Jede Hilfe wäre sehr geschätzt :)

+0

so sagen, Sie die Quelle für das Bild ändern möchten, aber halten Sie es ursprüngliche Quelle ist? – Joseph

Antwort

1

here's what i've come up

$(function() { 

    //reference array 
    var ref = []; 

    (function() { 

     //get each image and reference the element and store source 
     $('img').each(function() { 
      var newImg = {}; 
      newImg.el = this; //storing the DOM element instead of a jQuery object 
      newImg.src = this.src; 
      ref.push(newImg); 
     }); 
    }()); 

    //if the element is clicked, replace using the reference in the array 
    $('img').on('click', function() { 
     for (i = 0; i < ref.length; i++) { 

      //wrap reference in jQuery, and operate 
      $(ref[i].el).replaceWith('hrm'); 
     }; 

     //img still here even after DOM was replaced 
     console.log(ref); 
    }); 
});​ 
+0

Vielen Dank Joseph, ja, das war eine gute Lektion, um den Unterschied zu erkennen. Speichern des DOM-Elements im Vergleich zum Verweis auf das jQuery-Objekt. Aber es stellt sich tatsächlich heraus, dass mein Code nicht funktionierte, weil ich eine Suche durchführte und durch das gesamte body-Element ersetzte, um Hintergrundattribute (in TDs) loszuwerden, und das im Wesentlichen mein ursprüngliches DOM umstrukturierte. Vielen Dank für Ihre Hilfe und Einsicht! – marcy23

Verwandte Themen