2014-07-04 10 views
5

Podłączyłem wtyczkę JavaScript "Skycons" do pogody Yahoo RSS. Problem polega na tym, że wiele dni może mieć tę samą prognozę pogody i ponieważ wtyczka pobiera ikony z ID zamiast z klasy, nie jestem w stanie pobrać tej samej ikony po raz drugi.Skycons, cant wyświetlają tę samą ikonę dwa razy?

Na przykład, wszystkie poniżej ikony pokaże oprócz przykład ostatni li - bo powtórzył śnieg ID:

<ul class="days"> 
     <li class="col-md-3 col-sm-3 col-xs-3"><strong>Saturday</strong> 
      <canvas id="snow" width="50" height="50"></canvas> 
      <span>19&deg;</span> 
     </li> 
     <li class="col-md-3 col-sm-3 col-xs-3"><strong>Sunday</strong> 
      <canvas id="rain" width="50" height="50"></canvas> 
      <span>19&deg;</span> 
     </li> 
     <li class="col-md-3 col-sm-3 col-xs-3"><strong>Monday</strong> 
      <canvas id="sleet" width="50" height="50"></canvas> 
      <span>19&deg;</span> 
     </li> 
     <li class="col-md-3 col-sm-3 col-xs-3"><strong>Wednesday</strong> 
      <canvas id="snow" width="50" height="50"></canvas> 
      <span>19&deg;</span> 
     </li> 
</ul> 

Oto moja startowych JS:

<!--SkyCons--> 
<script type="text/javascript" src="js/vendors/skycons/skycons.js"></script> 
<script> 
     var icons = new Skycons({"color": "#fff"}), 
      list = [ 
      "clear-day", "clear-night", "partly-cloudy-day", 
      "partly-cloudy-night", "cloudy", "rain", "sleet", "snow", "wind", 
      "fog" 
      ], 
      i; 

     for(i = list.length; i--;) 
     icons.set(list[i], list[i]); 

     icons.play(); 
    </script> 

i tu jest link do odwołania pliku JS:

https://github.com/darkskyapp/skycons/blob/master/skycons.js

+0

Jaki skrypt uruchamiasz, aby zainicjować wtyczkę? –

+0

Patrz wyżej, zredagowałem oryginalny post, aby dołączyć ten punkt –

Odpowiedz

9

Y ou powinny korzystać z wersji, która współpracuje z odniesieniami elementów zamiast id

(i zmienić html użyć klasy zamiast identyfikatorów)

for(i = list.length; i--;) { 
    var weatherType = list[i], 
     elements = document.getElementsByClassName(weatherType); 
    for (e = elements.length; e--;){ 
     icons.set(elements[e], weatherType); 
    } 
} 

i zmienić html do

<li class="col-md-3 col-sm-3 col-xs-3"><strong>Saturday</strong> 
     <canvas class="snow" width="50" height="50"></canvas> 
     <span>19&deg;</span> 
    </li> 
    <li class="col-md-3 col-sm-3 col-xs-3"><strong>Sunday</strong> 
     <canvas class="rain" width="50" height="50"></canvas> 
     <span>19&deg;</span> 
    </li> 
    <li class="col-md-3 col-sm-3 col-xs-3"><strong>Monday</strong> 
     <canvas class="sleet" width="50" height="50"></canvas> 
     <span>19&deg;</span> 
    </li> 
    <li class="col-md-3 col-sm-3 col-xs-3"><strong>Wednesday</strong> 
     <canvas class="snow" width="50" height="50"></canvas> 
     <span>19&deg;</span> 
    </li> 

Jeśli potrzebujesz obsługi IE8 i starszych, musisz użyć tej funkcji do funkcji getElementsByClassName: Polyfill for getElementsByClassName for particular uses

+0

, działa doskonale, dziękuję. Nie pozwól mi oznaczyć odpowiedzi tak użytecznej jak reputacja poniżej 15. –

+0

@ TomHughes, możesz ją zaakceptować jako poprawną ze znacznikiem wyboru pod przyciskami do głosowania, jeśli chcesz. –

+0

@ GabyakaG.Petrioli to zdecydowanie mi pomogło. Oto [CodePen] (http://codepen.io/damiththa/pen/xOOEZQ?editors=1010) – MadushM

Powiązane problemy