2010-11-09 2 views
0

Моего HTML документ выглядит следующим образом:Выполнение функции в неявном контексте JQuery

<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 в coolPlugin, не сломав все (и написав некоторые неприятные хаки)?

Это было бы здорово, чтобы быть в состоянии либо:

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

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

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

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

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

coolPlugin Тогда будет установлена ​​на всех cool элементов в настоящее время и в будущем.

ответ

2

Я предлагаю .livequery() plugin для этого еще:

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

Важный бит:

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

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

+0

Nice, это кажется немного старым, хотя, я задаюсь вопросом, почему «живой» особенность событие было интегрировано в ядре JQuery , а не «чистый элемент». – jeje

+0

@jeje - '.live()' работает совсем по-другому ... это происходит, когда события пузырятся, что просто не происходит в этих случаях. –

+0

Кажется, это проверка соответствия узлов каждые 20 мс. – jeje

0

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

$('#cool_container').load('/anothercooldiv.html', function() { 
    $(this).coolPlugin(); 
}); 
+0

Это то, чего я хочу избежать :) – jeje

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