2013-08-12 2 views
0

Рассмотрим следующий JQuery плагин код:JQuery плагин не работает для всех элементов, которые применяются при

(function($){ 
$.fn.MyPluginMethod= function() { 
    $(this).after('<span>Hello</span>'); 
    }; 
})(jQuery); 

если мы называем эту функцию следующим образом: $('a').MyPluginMethod();для каждого<a> тега, который существует, он будет добавить a <span> тег после него.

Если мы изменим это так:

(function($){ 
$.fn.MyPluginMethod= function() { 
    title= $(this).attr('title'); 
    alert(title); 
}; 
})(jQuery); 

Это не будет предупреждения в заголовке для каждого<a> тега, который существует только для первого совпадения.

Почему это поведение? Thanks

ответ

4

Это потому, что вы создаете 1 экземпляр плагина, так что alert() вызывается один раз. Причина, по которой первый пример приводит к span элементам после каждого a, заключается в том, что функция jQuery выполняет цикл через соответствующий набор элементов.

Чтобы получить последний пример, чтобы работать, как вы хотите, вам нужно цикл вручную:

(function($){ 
    $.fn.MyPluginMethod= function() { 
     this.each(function() { 
      title = $(this).attr('title'); 
      alert(title); 
     }); 
    }; 
})(jQuery); 

Вы можете проверить, если плагин был создан экземпляр на нескольких элементов с помощью this.length

+0

, но во втором примере, я называем его с $ ('а') селектор, не следует этого один цикл через каждый из согласованных элементов тоже, и предупреждение для каждого из них? – user2653125

+0

Нет, потому что, как я уже говорил, вы создаете 1 экземпляр плагина. –

+1

@ user2653125 нет, потому что метод .attr() возвращает только первый сопоставленный элемент –

0

It будет alert, когда вы называете его, использовать также $.each вызвать его для нескольких элементов, как

HTML

<div title="test">test</div> 
<div title="test123">test123</div> 

SCRIPT

(function($){ 
$.fn.MyPluginMethod= function() { 
    return $(this).each(function(){ 
     title= $(this).attr('title'); 
     alert(title); 
    }); 
}; 
})(jQuery); 
$('div').MyPluginMethod(); 

Updated Fiddle

Чтение http://learn.jquery.com/plugins/basic-plugin-creation/

Смежные вопросы