2013-07-12 14 views
6

Questo non è assolutamente necessario, sto solo cercando di semplificare il mio codice. Questo è quello che ho:Javascript chiama più volte una funzione con gli argomenti

function fillWebsitePlaceFiller(number) { 
    document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite; 
    } 

      fillWebsitePlaceFiller(1); 
      fillWebsitePlaceFiller(2); 
      fillWebsitePlaceFiller(3); 
      fillWebsitePlaceFiller(4); 
      fillWebsitePlaceFiller(5); 
      fillWebsitePlaceFiller(6); 
      fillWebsitePlaceFiller(7); 

C'è un modo per chiamare la funzione solo una volta, e verrà eseguito attraverso di essa 7 volte con ogni argomento?

+7

deve essere venerdì, tutte le soluzioni di loop folli inondazioni. –

+0

Haha :) @JimRubenstein – eshellborn

risposta

24

Metodo 1 - iterazione

for (var i = 1; i < 8; i++) fillWebsitePlaceFilter(i); 

Metodo 2 - ricorsione

(function repeat(number) { 
    fillWebsitePlaceFiller(number); 
    if (number < 7) repeat(number + 1); 
})(1); 

Metodo 3 - applicazione functor

[1, 2, 3, 4, 5, 6, 7].forEach(fillWebsitePlaceFiller); 

Metodo 4 - interna iterazione

function fillWebsitePlaceFiller(times) { 
    for (var number = 1; number <= times; number++) { 
     document.getElementById("placefillerWebsite" + number).innerHTML = placefillerWebsite; 
    } 
} 

Metodo 5 - estendere comportamento funzione

Function.prototype.sequence = function(from, to) { 
    for (var i = from; i <= to; i++) this.call(null, i); 
}; 

fillWebsitePlaceFiller.sequence(1, 7); 

Metodo 6 - XPath (attenzione: non testato)

var query = '//*[@id[starts-with(., "placefillerWebsite"]]'; 
var result = document.evaluate(query, document, null, XPathResult.ORDERED_NODE_SNAPSHOT_TYPE, null); 
while (var node = result.iterateNext()) node.innerHTML = placefillerWebsite; 
+0

+1 solo perché sembra che ti stia divertendo. Ricorsione ?? Sheesh. :-) (E la tua risposta è ora la più completa di tutte le risposte postate.) –

+3

Farò meglio a fermarmi prima di iniziare con jquery DOM traversal. – OrangeDog

+0

Wow, non mi aspettavo così tanto! Grazie – eshellborn

4

Un ciclo semplice!

for (var i = 1; i <= 7; ++i) { 
    fillWebsitePlaceFiller(i); 
} 

Oppure, altrettanto facilmente, modificare fillWebsitePlaceFiller a fare il proprio ciclo for:

function fillWebsitePlaceFiller() { 
    for (var i = 1; i <= 7; ++i) { 
     document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite; 
    } 
} 
3

Qualcosa di simile

function fillWebsitePlaceFiller(number) { 
     for(i =0; i < number; i++) 
     document.getElementById("placefillerWebsite" + i).innerHTML = placefillerWebsite; 
     } 
2

utilizzare un ciclo

function doTimes(number) { 
    for (var i = 0; i < number; i++) { 
     fillWebsitePlaceFiller(i); 
    } 
} 

doTimes(7); 
5

Con ES6 può essere risolto un po 'più elegante:

[...Array(7)].forEach((_, i) => fillWebsitePlaceFiller(i + 1)) 
Problemi correlati