JQuery не может найти () внутри плагина? - PullRequest
0 голосов
/ 17 января 2012

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

<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 Ответ

1 голос
/ 17 января 2012

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

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

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

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