2010-11-15 16 views
5

$ '(her' içerikten ') içinden' click 'işlevinden bunu nasıl hedeflerim? Garip .parents(). Find() kodunu kaldırmak istiyorum.

$('.layout.responsive').each(function() { 
    $('.area.optional', this).before('<a href="#" class="toggle_responsive" onClick="return false">Show details</p>').hide(); 
    $('.toggle_responsive', this).click(function() { 
     $(this).parents('.layout.responsive').find('.area.optional').toggle(); 
    }); 
}); 

cevap

3

herkes burada olduğu gibi çözüm elbette aynıdır, ama bu sözdizimini kullanarak daha temiz ve aynı başarmak düşünüyorum Şu anda kullandığınız kod. Bunun yerine bir HTML dizesinde ekleme

$('.layout.responsive').each(function() { 
    var ar = $(this).find('.area.optional').hide(), 
     showDetail = $('<a />', { 
     href: '#', 
     class: 'toggle_responsive', 
     text: 'Show details', 
     click: function(){ 
      ar.toggle(); 
      return false; 
     }}).insertBefore(ar); 
}); 

, biz çok daha temiz bunu jQuery 1.4 tanıtılan yeni sözdizimini kullanabilirsiniz ve dağınık satır içi olay işleyicisi olmadan şu anda kullanıyoruz.

+0

öneriyi takdir ediyor. daha az okunabilir ama muhtemelen daha iyi. – henrijs

+0

+1 Bunu kullanayım. Bir öğe oluşturup, referansa başvurmaktan iyidir, daha sonra, tıklatmak için DOM'da bir kez daha bulmanız gerekir. – user113716

4

Sadece bir değişkende saklayabilirsiniz:

$('.layout.responsive').each(function() { 
    var $elem = $('.area.optional', this).before('<a href="#" class="toggle_responsive">Show details</p>').hide(); 
    $('.toggle_responsive', this).click(function(e) { 
     e.preventDefault(); 
     $elem.toggle(); 
    }); 
}); 

Ayrıca hemen hemen senin onclick="return false;" yaptıklarını ancak çok daha temiz bir şekilde yapar e.preventDefault(); aramayı unutmayın. adlandırılmış (özel olmayan) değişken kendisine kaydet

+0

$ Dollar_named_variables ile Yuck. – Gareth

+1

jQuery nesneleri için $ kullanmak için yaygın bir uygulama gibi görünüyor. – ThiefMaster

+0

Ayrıca, sanırım OP, iç işleçten dış "bu" istediğini, daha sonraki bir çağrıda değil – Gareth

7

:

$('.layout.responsive').each(function() { 
    var area = $('.area.optional', this).before('<a href="#" class="toggle_responsive" onClick="return false">Show details</p>').hide(); 
    $('.toggle_responsive', this).click(function() { 
     $(area).toggle(); 
    }); 
}); 
+1

'Var alan', 'var $ alan' değil? – henrijs

+0

Fark etmez, ancak genellikle javascript değişkenleri '$' ile başlamaz. JQuery'nin '$' sigil'i bir işlev adı olarak kullandığını, ancak – Gareth

+0

harika olan diğer tanımlayıcıların öneki bulunmadığını unutmayın. paylaşım için teşekkürler. Bunu daha sonradan da yararlı olduğu gibi tercih eder, ancak diğer amaçlar için. – henrijs