6
votes

Extension d'un élément DOM avec jQuery

J'aimerais étendre un élément DOM sans les prolonger tous. C'est-à-dire que j'aimerais une classe personnalisée avec ses propres méthodes et propriétés, mais aussi être en mesure de le traiter comme une div. E. g. xxx

est-ce possible?


0 commentaires

5 Réponses :


0
votes

JQuery ne sera pas capable de comprendre m lorsque vous le transmettez à la ligne APPEND, car il n'accepte que des chaînes et des éléments. Votre MyClass aura probablement une clé spécifique pour tenir l'élément lui-même (par exemple ce.el = document.createelement («div»);), mais JQuery ne sera pas capable de trouver cela seul.


1 commentaires

Compris, ce qui précède n'était qu'un exemple de ce que je cherchais à faire. Je cherche essentiellement quelque chose comme: myClass: documents.createelement ("div") C'est-à-dire que je ne veux pas dire à JQuery de trouver la clé spécifique, mais que JQuery pense que l'objet lui-même est l'élément, c'est-à-dire mon L'objet étend l'élément.



1
votes

Vous pouvez faire votre propre objet, comme vous le faites. Ensuite, vous pouvez utiliser JQuery's EXTENDRE Méthode pour prolonger l'élément.


2 commentaires

Cela ne fonctionne pas: fonctionnalité plus () {this.myname = "Plus!" } plus.Prototype.alert = fonction () {alerte (alerte! ')} var div = $ (document.createeelement ("div")); div.html ("c'est S"); $ .extend (vrai, div, plus); $ (document) .Ready (fonction (fonction () {$ ("corps"). Ajoutez (div); div.alert (); alerte (div.myname);});


Droite, vous avez besoin d'un objet, pas une fonction de fonctionner avec la méthode EXTENDER . Remplacez la ligne appropriée avec ceci: $. EXTENDRE (vrai, div, nouveau plus);



1
votes

Le problème viendra lorsque vous souhaitez extraire l'élément plus tard. Peut-être que vous pouvez simplement stocker les extensions comme des données de l'élément comme tels: xxx pré>

puis pour appeler les fonctions plus tard, vous feriez quelque chose comme: p>

new_div.data('m').changetext(new_div)


1 commentaires

Oui, je réalise que quelque chose comme ça est possible, mais ce n'est certainement pas élégant. Pour tout le battage médiatique sur JavaScript étant si génial, le fait que je ne puisse pas faire ma promenade de classe personnalisée comme un canard JQuery Kinda SUCKS.



1
votes

Vous pouvez également le faire en tant que plug-in: xxx

puis pour n'importe quel élément: xxx


0 commentaires

6
votes

Vous pouvez faire de votre classe de classe une classe enfant de l'élément divisé JQuery généré:

function MyClass (){
    this.foo = "waaa";
}
MyClass.prototype = $('<div/>');
MyClass.prototype.changeText = function(newtext){
    this.html(newtext);
}
MyClass.prototype.alertFoo = function(){
    alert(this.foo);
}

var m = new MyClass();
$("body").append(m);
m.changeText('appletree');


1 commentaires

Cela fonctionne également pour l'extension des plugins, des fonctions primordiales de manière à ce que cela soit en fait. J'utilise proto à l'intérieur de la classe et transmettez-le l'objet de base jQuery comme celui-ci: lien