2010-08-18 14 views
7

Mam ten kod w funkcji i chcę go skrócić - stosuje ten sam styl do każdego elementu w tablicy.Skrócona metoda JavaScript do duplikowania ciągów znaków

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'; 

NO odpowiedź do tej pory pracował (Ponieważ jestem pętli thru kodem ??)

rozwiązane poprzez ustawienie tylko poprzednio wyświetlanego widoczność slajdów do ukrytej

x = i; 
i = i+1; 

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

Holy Holy głosów, Batman! –

+0

wszystkie kopiują tę samą odpowiedź na to pytanie. –

+0

@Amr: informacje o tym, czy kopiują czy nie, są niejasne (jest to oczywista odpowiedź, więc prawdopodobnie nie), ale nie dodają niczego i powinny zostać usunięte. – Shog9

Odpowiedz

8

Jak o użyciem pętla:

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

Jaki jest powód downwise? Proszę zostawić komentarz podczas rezygnacji z odpowiedzi. –

+0

Najpierw po tym poście odbywa się głosowanie już dziś! - Dzięki – Rhys

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

Dobrze jest zadeklarować swoją zmienną indeksową * gdzieś * (ale niekoniecznie w instrukcji for(), ponieważ to i tak nie tworzy zakresu), aby uniknąć problemów z globalnymi. Ale tym razem Darin pobił cię na pięść ... ;-) – Shog9

+0

"Z biciem" przez wszystkie 4 sekundy (zgodnie z tym, co zobaczyłem, kiedy strona została ponownie załadowana.Nie zadałem sobie trudu z usunięciem, ponieważ uznałem, że to wzmocniło punkt, że jest to sposób na zrobienie tego. – gabe3886

5

Wystarczy dostarczyć coś innego, rozwiązanie jQuery:

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

Edit: Wygląda na to, że będziesz musiał zbierać referencje DOM pierwszy. (DivsArray jest naprawdę tylko tablicę z nazwiskami div, a nie same DIV?)

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

Stary, pytasz o kłopot z tą odpowiedzią. To trudny tłum! :) Sprawdź komentarze. :) –

+0

@D Hoerster - ha ha, nie myliłem się Właśnie dodałem komentarz i anwswer został usunięty w części! :) –

+0

jeśli "divsArray" to wszystkie ciągi id, powinno to być '$ ('#' + this) .css (" visibility "," hidden "); "prawda? – lincolnk

4

To brzmi dla mnie, że nie może być więcej div ... Czy mogę zasugerować tę zmianę kodu Darin za:

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

Dobry punkt na uzyskanie divsArray.length –

+0

Podoba mi się to na zasadzie, choć ściśle mówiąc to nie jest koniecznie zastąpienie tego, co OP napisał. – Shog9

+1

Nie użyłbym 'divsArray.length', chyba że OP wyraźnie mówi, że chce użyć wszystkich elementów w tablicy. Co jeśli chce tylko pierwszych czterech elementów? Ale i tak jest to dobry punkt. –

4

a oto jak to działa zarówno Prototype i Mootools:

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

dlaczego upadł? Nie widzę, gdzie to jest duplikat ... –

4

można umieścić następującą funkcję w tym samym/potomek zakresu divsArray.

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

Następnie można wykonać jedną

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

lub

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

Wygląda to bezcelowe, ale jeśli masz więcej tablic tak, może chcesz zmodyfikować swoją funkcję tak:

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

i pętla przez dowolną tablicę:

for (var i = 0; i < divsArray.length; i++) 
    aho(divsArray, i); 

I nie, nie ma makr ani szablonów.

+0

Bardzo kreatywny, +1 za udzielenie interesującej odpowiedzi. – sworoc

1

tak długo, jak my wszyscy palowania na wezmę najbardziej bezpośrednie podejście: 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'; 

i po prostu iść na przekór:

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

nie mogłem "oprzeć się" wyzwaniu.Powiedziałbym dodać je do tej samej klasy i zrobić coś takiego (przykład prototyp):

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

+1 dla invoke, nie myślałem o tym, ale poza tym robisz założenia (być może nie ma wspólnej klasy css lub może jest i jest używana również przez inne składniki). Musisz więc najpierw znaleźć sposób na przekształcenie tablicy identyfikatorów w mapę elementów. Domyślam się, że jest to tablicaOfIds.map ($). Invoke(), ale nie jestem pewien. –

0

Możemy iteracyjne nad tablicę zawierającą id s Korzystanie Array.prototype.forEach() i ES6 za 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>

Powiązane problemy