Запуск функции в неявном контексте jQuery - PullRequest
0 голосов
/ 09 ноября 2010

Мой HTML-документ выглядит так:

<html>
 <head> .. load jquery and other stuff </head>
 <body>
   <div id="cool_container">
    <div class="cool">.. no script friendly markup ..</div>
   </div>
   <a id="cool_link">Link</a>
 <script>
    function installStuff(){
        $('.cool').coolPlugin();
        $('#cool_link').click(function(){
                $('#cool_container').load('/anothercooldiv.html');
        });
    }
    $(document).load(function(){ installStuff(); });
 </script>

 </body>
</html>

Конечно, /anothercooldiv.html дает еще один <div class="cool"> .. etc ...</div> фрагмент.

Так, как лучше всего превратить свежий классный div вклассный плагин, не ломая все (и не создавая несколько неприятных хаков)?

Было бы здорово иметь возможность:

  • ВызовinstallStuff с контекстом jQuery по умолчанию «#cool_container», поэтому я мог бы вызвать что-то вроде:

    $.doThisInContext(function(){installStuff();}, $('#cool_container');

В обратном вызове load.

  • Или иметь эквивалент 'live' (который решит проблему ссылок, если в cool есть ссылки), но для существования элемента, который я мог бы использовать таким образом в моей функции installStuff:

    $('.cool').exists(function(what){ what.coolPlugin() };

Тогда coolPlugin будет установлен на все элементы cool сейчас и в будущем.

Ответы [ 2 ]

2 голосов
/ 09 ноября 2010

Я бы предложил .livequery() плагин для этого кадра:

$(function() {
    $('.cool').livequery(function() {
      $(this).coolPlugin();
    });
    $('#cool_link').click(function(){
            $('#cool_container').load('/anothercooldiv.html');
    });
});

Важный бит:

$('.cool').livequery(function() {
  $(this).coolPlugin();
});

Будет работать для каждого тока иБудущий элемент .cool по мере их добавления, запускает плагин для каждого.

0 голосов
/ 09 ноября 2010

Применение плагина к недавно загруженному ajax-контенту не должно быть слишком сложным:

$('#cool_container').load('/anothercooldiv.html', function() {
   $(this).coolPlugin();
});
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...