2012-01-17 3 views
0

Я очень новичок в jQuery, и я разрабатываю плагин (для моего собственного использования) для установки элементов DOM html() с контентом, возвращаемым вызовом ajax. Пример:jQuery не может найти() внутри плагина?

<span id="a" class="scalar">?</span> 
<span id="b" class="scalar">?</span> 
<span id="c" class="scalar">?</span><!-- this will not be updated --> 

Если stats.php будет возвращать объект JSON как это: { a : 3, b : 7 } полученный HTML-бы (каждое свойство объекта будет совпадать с id среди выбора, на котором был вызван плагин):

<span id="a" class="scalar">3</span> 
<span id="b" class="scalar">7</span> 
<span id="c" class="scalar">?</span><!-- this will not be updated --> 

Это вызов и определение плагина. Вопрос: почему find() не может правильно выбрать элемент для обновления?

<script type="text/javascript"> 
    $(document).ready(function() { 
     $('.scalar').scalar({ url : '../REST/stats.php' }); 
    }); 
</script> 

(function($) { 

    $.fn.scalar = function(options) { 

     var opt = $.extend({ 
      url : 'REST/stats.php', 
      type : 'POST', 
      context: this, 
      dataTypeString : 'json' 
     }, options); 

     $.ajax($.extend(opt, { 
      success : function(obj) { 
       for(k in obj) { 
        if(!obj.hasOwnProperty(k)) continue; 
        console.log(this.find('#' + k)); 
       } 
      } 
     })); 

     return this.each(); 
    }; 

})(jQuery); 

ответ

1

Поскольку find ищет потомков элементов, а элементы, которые вы ищете, не являются потомками (все они являются братьями и сестрами друг друга). Используйте filter вместо:

console.log(this.filter('#' + k)); 

this будет объект JQuery оберточной набор элементов DOM. Если один или несколько из этих элементов не содержат элемент потомка с id, который вы ищете с find, это не сработает. Вам нужно посмотреть на сами элементы, что и делает filter.

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