2011-01-11 21 views
3

Ist es nicht ratsam, einem JQuery-Element Methoden hinzuzufügen?Anpassen eines JQuery-Elements

zB:

var b = $("#uniqueID"); 
b.someMethod = function(){}; 

aktualisiert

Nur um zu klären, ich arbeite an einer JS-driven-Anwendung, die JSON-Daten auf lokale JS Objekte verbindlich, die die Geschäftslogik für die Manipulation des einkapseln tatsächliche zugrunde liegende DOM-Elemente. Die Objekte speichern derzeit einen Verweis auf ihre zugeordneten HTML-Elemente. Ich dachte, dass ich eine spezifische Instanz eines jquery Elements mit seiner Logik zusammenführen könnte, indem ich diese Referenz addiere, die die erforderlichen Methoden hinzufügt.

+1

Können Sie erweitern, was Sie hier eigentlich erreichen möchten? –

Antwort

2

Gut mit

$.fn.someMethod = function(options) { 
    # ... 
}); 

Anruf, es ist nichts falsch mit ihm. Es ist jedoch ziemlich sinnlos. Beispiel:

$('body').someMethod = function(){}; 
console.log($('body').someMethod); // undefined 

Sie fügen die neue Funktion nur dieser Auswahl und nicht allen Selektionen dieses Elements hinzu.

Was sollten Sie stattdessen tun ist, um eine neue Funktion jQuery.fn, hinzuzufügen, die für jQuery.prototype eine Abkürzung:

jQuery.fn.someMethod = function() { 
    if (this[0].nodeName == 'body') { 
     // do your function 
    } 

    return this; // preserve chaining 
}; 
0

Oder Sie können ein jQuery-Plugin erstellen. Sie können ein Plugin auf diese Weise definieren: es $('body').someMethod();

2

Das Problem ist, dass Ihre Funktion ganz vorübergehend sein würde. Eine weitere Anfrage und es wird weg sein. Sie können das jQuery-Objekt selbst um $ .fn.someMethod = function() {} erweitern, und diese Methode ist für alle Abfragen verfügbar.

$.fn.someMethod = function() {} 
var b = $("body"); 
b.someMethod(); 
Verwandte Themen