2009-10-15 2 views
6

Я пытаюсь создать динамический блок выбора в JavaScript с целым рядом лет, начиная с «определенного» года и заканчивая текущим годом. Есть ли что-то вроде класса Ruby's range в JavaScript или мне нужно цикл через годы, используя цикл for?Диапазон лет JavaScript в поле выбора

Вот что я придумал, хотя я думаю, что это немного похоже на Ruby. Я могу просто использовать диапазон.

this.years = function(startYear){ 
     startYear = (typeof(startYear) == 'undefined') ? 1980 : startYear 
     var currentYear = new Date().getFullYear(); 
     var years = [] 
     for(var i=startYear;i<=currentYear;i++){ 
      years.push(i); 
     } 
     return years; 
    } 

ответ

17

У JavaScript есть объект Range, но он относится к произвольной части DOM и не поддерживается в IE 6/7.

Если вы хотите, вы можете упростить свою функцию, но это все равно.

this.years = function(startYear) { 
      var currentYear = new Date().getFullYear(), years = []; 
      startYear = startYear || 1980; 

      while (startYear <= currentYear) { 
        years.push(startYear++); 
      } 

      return years; 
    } 
+0

Perfect. Я не понимал, что вы можете использовать || вместо того, чтобы возиться с typeof(). – rwilliams

+0

Ya, но только если false/null является недопустимым значением для того, над чем вы работаете. Это очень распространенный метод обеспечения работы по умолчанию. –

1

К сожалению, нет, нет функции «Диапазон» в JavaScript, что сравнимо с Руби, так что вы должны сделать это с петлей. Похоже, что то, что вы делаете, должно работать.

0

Вы можете предоставить метод диапазон в JavaScript, но вам нужно будет использовать это много платить за включение его в исходном коде.

var A = Array.from (-5,5) >>> возвращаемое значение: (массив) -5, -4, -3, -2, -1,0,1,2,3,4 , 5

вар В = Array.from (10,100,10) >> возвращаемое значение: (массив) 10,20,30,40,50,60,70,80,90,100

вар С = Array.from ('a', 'z') >> return value: (Array) a, b, c, d, e, f, g, h, i, j, k, l, m, n, o , p, q, r, s, t, u, v, w, x, y, z

Array.from= function(what, n, step){ 
    var A= []; 
    if(arguments.length){ 
     if(n){ 
      return A.range(what, n, step) 
     } 
     L= what.length; 
     if(L){ 
      while(L){ 
       A[--L]= what[L]; 
      } 
      return A; 
     } 
     if(what.hasOwnProperty){ 
      for(var p in what){ 
       if(what.hasOwnProperty(p)){ 
        A[A.length]= what[p]; 
       } 
      } 
      return A; 
     } 
    } 
    return A; 
} 

Array.prototype.range= function(what, n, step){ 
    this[this.length]= what; 
    if(what.split && n.split){ 
     what= what.charCodeAt(0); 
     n= n.charCodeAt(0); 
     while(what<n){ 
      this[this.length]= String.fromCharCode(++what); 
     } 
    } 
    else if(isFinite(what)){ 
     step= step || 1; 
     while(what <n) this[this.length]= what+= step; 
    } 
    return this; 
} 
Смежные вопросы