Как улучшить этот код, используя $ (this) в jQuery? - PullRequest
2 голосов
/ 07 августа 2009

У меня есть следующая функция jQuery (упрощенно):

function doSomething(el, str) {
 el.find('.class').text(str));
}

Не беспокойтесь о части .text(), на самом деле я делаю что-то более сложное, чем это ... Но так как это не имеет отношения к моему вопросу, я просто использую .text() здесь как простое пример.

Проблема в том, что каждый раз, когда я вызываю функцию doSomething(), код выглядит так:

doSomething($(this), foo); // the second argument is irrelevant
doSomething($(this), bar); // the second argument is irrelevant

Как видите, я всегда передаю $(this) в качестве первого аргумента. Почему-то я чувствую, что это не тот путь ... Можно ли улучшить эту функцию, чтобы она автоматически наследовала $(this) из контекста, где она вызывается? Может быть что-то вроде следующего:

$(this).doSomething(foo); // the foo argument is irrelevant
$(this).doSomething(bar); // the bar argument is irrelevant

Ответы [ 2 ]

3 голосов
/ 07 августа 2009

Вы можете создать простой плагин для этого.

Много статей о. См. этот один на сайте jQuery для получения дополнительной информации

$(function(){

   jQuery.fn.changeAnchorText = function(str) {
     return this.each( function(){
        $(this).find('a.someClass').text(str);
     });
   };

});

затем, чтобы вызвать его

$('div').changeAnchorText("Any descendant anchor tags inside this div with a class of someClass will have the text changed to this message");
1 голос
/ 07 августа 2009

, кажется, вы хотите что-то, что работает как плагин jquery.

(function($){

//Attach doSomething method to jQuery
$.fn.extend({ 

      doSomething: function(options) {

        return this.each(function() {

          var el = $(this);
          // do something here

        });
    }
});

})(jQuery);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...