2010-08-18 17 views
7

Bu kodu bir işlevde var ve kısaltmak istiyorum - bir dizideki her öğeye aynı stili uygular.Javascript dizeleri çoğaltmak için kısa yol yolu

Nasıl kullanma hakkında gizli

x = i; 
i = i+1; 

document.getElementById(divsArray[x]).style.visibility = 'hidden'; 
+1

Kutsal oylar, Batman! –

+0

hepsi aynı soruya bu soruya kopyalanıyor –

+0

@Amr: Kopyalama yapıp yapmadıkları belli değil (açık bir cevaptır, büyük olasılıkla değil) ama hiçbir şey eklemiyorlar ve silinmiş olmalılar. – Shog9

cevap

8

, önceleri sadece görüntülenen slayt görünürlüğünü ayarlayarak bunu Çözüldü (kod ?? aracılığıyla döngü ediyorum Çünkü)

document.getElementById(divsArray[0]).style.visibility = 'hidden'; 
document.getElementById(divsArray[1]).style.visibility = 'hidden'; 
document.getElementById(divsArray[2]).style.visibility = 'hidden'; 
document.getElementById(divsArray[3]).style.visibility = 'hidden'; 

bugüne kadar YOK cevap çalıştı döngü:

for (var i = 0; i < 4; i++) { 
    document.getElementById(divsArray[i]).style.visibility = 'hidden'; 
} 
+1

Gerekçenin nedeni nedir? Bir cevap reddederken lütfen yorum bırakın. –

+0

İlk gönderiyi bugün alır oylama alır! - Teşekkürler – Rhys

2
for (i=0;i<4;i++) { 
    document.getElementById(divsArray[i]).style.visibility='hidden'; 
} 
+2

Dizininizle ilgili sorunlardan kaçınmak için indeks değişkeni * bir yerlerde * (mutlaka for() deyiminde olmasa da, bu zaten bir alan yaratmadığından) bildirmek için iyi bir stil. Ama Darin seni bu sefer yumrukla dövdü ... ;-) – Shog9

+0

"Yumrukla dövüldü", 4 saniye boyunca (sayfa yeniden yüklendiğinde gördüğüm şeye göre).Bunu yapmanın bir yolu olduğunu pekiştirdiğimi düşündüğümden dolayı silme zahmetine girmedim. – gabe3886

5
$(divsArray).each(function() { 
    $(this).css("visibility", "hidden"); 
}); 

Düzenleme::Sadece farklı bir şey, bir jQuery çözüm sağlamak için öncelikle DOM başvuruları toplamak zorunda ediyor gibi. (? DivsArray gerçekten sadece div isimlerinin bir dizi değil, birer bölümdür kendileri olduğunu)

$(divsArray).each(function() { 
    $("#" + this).css({ "visibility": "hidden" }); 
}); 
+3

Dostum, o cevapta sorun var. Bu zor bir kalabalık! :) Yorumlara göz atın. :) –

+0

@D Hoerster - ha ha, senin yanlış değil Sadece bir yorum eklemek üzereydim ve anwswer kısmen yoldan silindi! :) –

+0

'divsArray' tüm kimlik dizeleri ise, '$ (' # '+ this) .css (" görünürlük "," gizli ") olmalıdır; doğru mu? – lincolnk

4

... more div'ler olabileceğini bana geliyor ben Darin koduyla bu değişikliği önerebilir:

o Prototype ve Mootools hem de nasıl çalıştığını burada
for (var i = 0; i < divsArray.length; i++) { 
    document.getElementById(divsArray[i]).style.visibility = 'hidden'; 
} 
+0

dizi sayısını değiştirebilme imkanı sunuyor divsArray.length –

+0

almak için iyi bir nokta İlkesel olarak bunu seviyorum, kesinlikle konuşmamasına rağmen OP'in yazdığı şey için mutlaka bir yedek. – Shog9

+1

OP, dizideki tüm öğeleri kullanmak istediğini açıkça söylemediği sürece divsArray.length' kullanmazdım. Ya sadece ilk dört elementi istiyorsa? Ama yine de iyi bir nokta. –

4

ve bulunuyor:

$(divsArray).each(function(item) { 
    $(item).setStyle({visibility: "hidden"}); 
}); 
+1

neden düşüş? Bunun nerede olduğunu göremiyorum ... –

4

Sen divsArray aynı/soyundan kapsamında aşağıdaki işlevi koyabilirsiniz.

function baka(idx) { 
    document.getElementById(divsArray[idx]).style.visibility = 'hidden'; 
} 

Sonra yapabileceğiniz ya

baka(0); 
baka(1); 
baka(2); 
baka(3); 

veya

for (var i = 0; i < 4; i++) 
    baka(i); 

Bu anlamsız görünüyor, ama buna benzer daha fazla diziler varsa, bu gibi işlevi değiştirmek isteyebilirsiniz

:

function aho(arr, idx) { 
    document.getElementById(arr[idx]).style.visibility = 'hidden'; 
} 

and loop bunun gibi herhangi bir dizi aracılığıyla: () Ve hayır, makro yok veya şablon yok. D

document.getElementById(divsArray[0]).style.visibility = 
document.getElementById(divsArray[1]).style.visibility = 
document.getElementById(divsArray[2]).style.visibility = 
document.getElementById(divsArray[3]).style.visibility = 'hidden'; 

ve isteklere karşı gitmek: Hepimizin üzerinde kazık konum olarak, ben en doğrudan yaklaşım alacağım sürece

+0

Çok yaratıcı, ilginç bir cevap vermek için +1. Invoke için – sworoc

1

var d = null, i = 0; 
while (d = document.getElementById(divsArray[i++])) { 
    d.style.visibility = 'hidden'; 
} 
1

yapamadım meydan okumaya "diren".Ben bunları aynı sınıf eklemek ve (Prototip örneğin) gibi bir şey yapmak söyleyebilirim:

$$('.className').invoke('setStyle', { 'visibility' : 'hidden' }); 
+0

+ 1, bunu düşünmüyordu, ama bunun dışında varsayımlar yapıyorsunuz (belki ortak bir css sınıfı yok veya belki de var ve diğer bileşenler tarafından da kullanılıyor). Bu yüzden, bir dizi kimlik öğesini önce bir öğelerin haritasına dönüştürmenin bir yolunu bulmalısınız. Benim tahminim arrayOfIds.map ($) olur. Invoke() ama emin değilim. –

0

Biz dizi Array.prototype.forEach() kullanılarak id s içeren adımlayabilirsiniz ve ES6 en Arrow Functions:

var elemIds = ['two', 'four', 'six']; 
 

 
elemIds.forEach(id => {document.getElementById(id).style.visibility = 'hidden';});
<div id="one">One</div> 
 
<div id="two">Two</div> 
 
<div id="three">Three</div> 
 
<div id="four">Four</div> 
 
<div id="five">Five</div> 
 
<div id="six">Six</div> 
 
<div id="seven">Seven</div>

İlgili konular