Disons que j'ai deux nœuds html comme ceci :
<div class='node a'>one</div>
<input class='node b' value='two'>
et je voudrais ajouter une méthode pour $('.node.a'), mais pas pour le node b. Ce que j'aimerais vraiment faire est quelque chose comme ceci :
$('.node.a').addMethod('val', function() {
return $('.node.b').val();
});
alert($('.node.a').val()); // alerts 'two'
Il est clair que je ne veux pas surcharger la méthode "val" pour chaque nœud jQuery. Est-il possible de le faire ?
* UPDATE *
Conformément à la suggestion de mgibsonbr, j'ai écrit un plugin jQuery pour faire cela pour moi. Au lieu d'utiliser la méthode jQuery data, je n'exécute la fonctionnalité différente que si le nœud en question est celui qui est appelé. Cela signifie que ce formulaire ne fonctionnera pas pour les listes jquery qui correspondent à plusieurs nœuds html. Le voici :
// overrides a method thats supposed to be called on a single node (a method like val)
$.fn.overrideNodeMethod = function(methodName, action) {
var originalVal = $.fn[methodName];
var thisNode = this;
$.fn[methodName] = function() {
if (this[0]==thisNode[0]) {
return action.apply(this, arguments);
} else {
return originalVal.apply(this, arguments);
}
};
};