2011-01-16 10 views
0

Gibt es eine Möglichkeit, eine globale Variable in jQuery in einem eigenen Namespace zu deklarieren?jQuery: Globaler Variablen-Namespace Problem

Sicher kann ich globale Variablen mit einfachem altem JavaScript deklarieren, aber sie fallen in den Namensraum window. Zum Beispiel, wenn ich eine Variable mit dem Namen document hätte, würde es sicherlich das document Objekt der window überschreiben.

Verfügt jQuery über eine Hash-Tabelle, in der Sie jedes Objekt nach seinem Namen speichern können?

Danke.

Antwort

4

Nicht sicher, warum Sie jQuery für das verwenden möchten? Sie könnten nur einen eigenen Namensraum erstellen:

var namespace = { 
    document : "Foo" 
}; 

Bitte erarbeiten, wenn es einige Notwendigkeit, irgendwie jQuery zu verwenden.

+0

wusste, dass ich für eine Tatsache, dass JavaScript nicht, dass Sie in einem eigenen Namensraum definieren globale Variablen nicht lassen, so dachte ich jQuery eine Lösung wie immer haben könnte. : D –

+0

Ich könnte dich da falsch verstehen, aber wäre die Variable 'document' in meinem Beispiel nicht global über den Namespace' namespace' verfügbar? – polarblau

+0

Ja, tut es. Ich habe gerade deine Frage beantwortet, warum ich überhaupt jQuery benutzen wollte. –

2

Natürlich können Sie. Erstellen Sie einen Namespace als ein Objekt, und hängen Sie es an die jQuery-Funktion an.

(function ($) { 

    $.myNamespace = {}; 

})(jQuery); 

Hier habe ich eine automatisch ausführende anonyme Funktion erstellt, um die Arbeit zu erledigen. Ich kann dann andere Eigenschaften und Funktionen zum Namespace innerhalb dieser Funktion hinzufügen. Dies vermeidet auch das Problem, dass jemand anders $ zu etwas anderem umbenennt.

Danach erfolgt Sie Ihren Namespace als jQuery.myNamespace

2

verweisen Wenn die Variable etwas, das mit einem Element zugeordnet werden soll später verwendet werden, vielleicht in einer anderen Routine, können Sie jQuery „data“ verwenden Methode, um es zu speichern.

z.B.

: 
    : 

// Save original HTML content. 

var old_html = $('#box').html(); 
$('#box').data({originalContent: old_html}); 

// Replace with new content. 

$('#box').empty().html(new_html); 

    : 

// Restore original content (maybe in a different function). 

var orig_html = $('#box').data('originalContent'); 
$('#box').empty().html(orig_html); 

    : 

Ich hoffe, das ist nützlich für Sie.

Grüße Neil