2016-04-08 13 views
1

Çok fazla benzer soru var ve bunların çoğuna baktım, ancak bu soruna hitap eden bir şey bulamadık. Sorun, olay dinleyicilerini belirli bir sınıfa uygulamak (çoğunlukla başarı) uygulamak ve bu sınıfların her birinin ayrı bir sınıfa sahip kendi öğelerine sahip olmasıdır. JavaScript - Çeşitli Sınıfları Kullanırken Genişlet/Daraltma Sorunları

group.addEventListener("click", toggle, false); 

group

tıklama etkinliğini olacak bir sınıftır.
function toggle() { 
     var contents = this.getElementsByClassName('content');  

     for (i = 0; i < contents.length; i++) { 

      if (contents[i].style.display == "block") { 
       contents[i].style.display = "none"; 
      } 
      else { 
       contents[i].style.display = "block"; 
      } 
     }  
    } 

contents

group içinde yuvalanmış başka sınıftır. contents bir sürü olacak, ama sadece bir avuç group.

o/istediğim budur o belirli group altında her contents, sadece olanları daraltır genişletir için .addEventListener eser, ama click olayı kullanma. group'dan herhangi birine tıklıyorum ve sayfadaki contents'un tümü genişleyecek/daraltılacaktır. Bunu nasıl düzeltebilirim? Bu arada, bunlar sadece kodun snippet'leri (gönderilecek çok şey var). Kapsam sağlamak için this kullanmayı denedim, ancak yine de aynı sonuçları üretmesi nedeniyle yanlış yapıyorum. Şimdiden teşekkür ederim.

Düzenleme: SharePoint web bölümü için bu kullanıyorum HTML

group.innerHTML += String.format("<div class='group' style='display: block;'>" + 
          "<h3 style='display: inline-block; color: #000; margin: 0px; padding: 0px;'>{0}</h3>" + 
          "<img src='https:\/\/my.blah.com\/_layouts\/15\/images\/ecbarw.png' style='margin: 5px;' alt='Click to expand-collapse.' />" + 
          "{1}</div>", trimmedKey, groups[key]); 

group.addEventListener("click", toggle, false); 

hakkında

Daha. Bu, görüntülü reklam şablonlarının içinde yer alıyor. Bu yüzden, gönderilecek pek çok alakasız kod var, ancak group ve contents için alakalı HTML'yi ekleyeceğim.

var content = String.format('<div class="content" style="display: none; margin: 30px 0px;"><span id="{0}" class="ms-srch-item-title">' + 
       '<h3 class="ms-srch-ellipsis">{1}</h3>' + 
      '</span>' + 
      '<span style="margin-right: 10px;"><span style="font-weight:bold;">Assigned To: </span>{2}</span>' + 
      '<span style="margin-right: 10px;"><span style="font-weight:bold;">Due Date: </span>{3}</span>' + 
      '<span style="margin-right: 10px;"><span style="font-weight:bold;">Task Status: </span>{4}</span></div>', $htmlEncode(id + Srch.U.Ids.title), titleHtml, assignedTo, dueDate, status); 

search.Grouping.push(grouping, content); 

content

gruplara ayırır bir fonksiyonu (burada gösterilmemiştir) itilmiş oluyor. groups[key] temel olarak content ile aynı şeydir.

+0

Eğer HTML yapısı temelde neye benzediğini açıklamak Can ve Hangi unsurların etkilenmesi ve gerçekte etkilenmesi bekleniyor? Aynı anda iki sınıf seçmeniz gerekiyor mu? Sonra document.getElementsByClassName ('content anotherClass') 'gibi bir şey kullanın. – Xufox

+0

"İçerik" veya "içerik" sınıf adı mıdır, çünkü kodda 'content' kullandığını görüyorsunuz, fakat 'content''den bahsettiğiniz soruda? – AKS

+0

Yayını daha fazla bilgi içerecek şekilde düzenledim. Xufox - Aynı anda iki sınıfa ihtiyacım var, ama bunu hiç denemedim: 'document.getElementsByClassName ('content anotherClass')' bu yüzden bunu deneyeceğim. Ve AKS - içerik ve içerik teknik olarak iki farklı şeydir. İçerik 'içerik' dizidir, ancak aynı bilgiye atıfta bulunur. – LaLaLottie

cevap

0

Ama senin durumunda çalışmıyor neden emin değilim ama burada sizin için basit bir demo hazırladık:

// get all the elements with class 'group' 
 
var groups = document.getElementsByClassName('group'); 
 

 
// add click event listener to each group 
 
for (var i = 0; i < groups.length; i ++) 
 
    groups[i].addEventListener("click", toggle, false); 
 

 
// function to toggle group contents 
 
function toggle() { 
 
    // get all the elements within this group with class 'content' 
 
    var contents = this.getElementsByClassName('content');  
 

 
    // if the content is visible then hide it and vice-versa 
 
    for (i = 0; i < contents.length; i++) { 
 
    if (contents[i].style.display == "block") { 
 
     contents[i].style.display = "none"; 
 
    } 
 
    else { 
 
     contents[i].style.display = "block"; 
 
    } 
 
    }  
 
}
.content { 
 
    display: None; 
 
    padding-left: 10px; 
 
} 
 

 
.group { 
 
    margin-top: 10px; 
 
}
<div class="group"> 
 
Group1 
 
    <div class="content another"> 
 
    Group 1 Content 1 
 
    </div> 
 
    <div class="content another"> 
 
    Group 1 Content 2 
 
    </div> 
 
</div> 
 
<div class="group"> 
 
Group2 
 
    <div class="content another"> 
 
    Group 2 Content 1 
 
    </div> 
 
    <div class="content another"> 
 
    Group 2 Content 2 
 
    </div> 
 
</div>

+0

İçerik tıklandığında daraltılmış grup içeriği var mı? OP iyi mi? – itzmukeshy7

+0

Eh, bunun tam bir cevap olmadığını ancak OP'nin kendi kodunu geliştirebileceği bir fikir olduğunu kabul ediyorum. Yorumlara ilk bakışta bir JS keman ekledim ama OP cevap olarak eklemem gerektiğini söyledi. – AKS

+1

Doğru sadece soruyorum; – itzmukeshy7