@roo: Инкапсуляция не повреждается здесь, потому что сам класс диктует, кто может получить доступ к его членам парламента, не занимающим официального поста. Инкапсуляция была бы только повреждена, если бы это могло бы быть вызвано снаружи класса, например, если Ваш operator <<
объявил бы “I'm, друг класса foo
.”
friend
заменяет использование public
, не использование private
!
На самом деле, C++ FAQ уже отвечает на это .
Я понимаю, почему он захватывает все элементы из DOM, потому что это то, что делает функция $ (), а затем, после выбора элементов DOM, она выполняет функцию live ().
В этом случае вам нужно будет использовать один из обходных путей, предложенных в другом месте в ответах здесь.
Я решил эту проблему, переопределив find ():
jQuery.fn.find = function(old) {
return function() {
var m = arguments[0].match(/^lazy:(.*)/);
if(m) {
this.selector = m[1];
return this;
}
return old.apply(this, arguments);
}
} (jQuery.fn.find);
// this will select elements...
$("input").live("click", function() {
// this won't
$("lazy:input").live("click", function() {
live
- это просто способ передать делегирование события людям, которые не понимают его.
Похоже, вы знакомы с концепцией и нуждаетесь в производительности. Я бы посоветовал на самом деле явно использовать делегирование событий вместо live
.
$(document).bind('click', function(event)
{
var $target = $(event.target);
if( $target.is('li a') )
{
// Do something with $target
}
});
На данный момент существует недокументированный способ, который будет работать без предварительного выбора элементов
jQuery.fn.selector="p";
jQuery.fn.live('click',function(){
alert('clicked');
});
. Это позволяет вам установить живой обработчик без сопоставления jQuery элементов, которые в настоящее время существуют в DOM, который он все равно игнорирует.