2016-11-10 40 views
1

我正在處理的小天氣預報應用程序。我一直在試圖將溫度從攝氏溫度變爲華氏溫度,但是我所做的所有更改都不會改變數值或完全消除該線。我想學習使用數據屬性,如果有可能訪問和更改數據值

$(document).ready(function(){ 

    var long; 
    var lat; 

     $.getJSON("https://crossorigin.me/http://ip-api.com/json", function(data2){ //access RESTFUL geo location API & set lattitude.longitude 
      lat=data2.lat; 
      long=data2.lon; 

    var api = "https://crossorigin.me/http://api.openweathermap.org/data/2.5/weather?lat="+lat+"&lon="+long+"&appid=de61ccfbde0405f57d64dbb53323fccf&units=metric"; 
    //Access weather API 

     $.getJSON(api, function(data){ 

      var iconCode = data.weather[0].icon; //get Icon from API related to current weather conditions 
      var iconUrl = "http://openweathermap.org/img/w/"+iconCode+".png"; 
      var tempCel = data.main.temp; 
      $(".heading").append("<h2>"+data.name+","+data.sys.country+"</h2>"); 
      $(".message").append("<h4 id='tempData' data-temp='" + tempCel + "'>Current Temperature: "+tempCel+"&#8451</h4>"); 
      $(".message").append("<h4>Conditions: "+data.weather[0].main+"</h4>"); 
       // $("#reveal").on('click', function(){ //click button 
       // data.main.tempData //on click convert temperature to farenheight 
       // }); 
      $(".message").append("<img id='conditions' src="+iconUrl+">"); 

      $("#tempData").hover(function(){ 
       $("#tempData").fadeToggle('slow', function(){ 

       }); 
      }); 
      console.log(data); 
     });  
     }); 
    //$("#reveal").on("click", function(){ 
    //}); 
}); 
+0

只需使用 –

回答

0

請看看下面的代碼。希望這可以幫助你:

$.getJSON(api, function(data){ 

    var iconCode = data.weather[0].icon; //get Icon from API related to current weather conditions 
    var iconUrl = "http://openweathermap.org/img/w/"+iconCode+".png"; 
    var tempCel = data.main.temp; 
    var tempFar = Math.round(parseFloat(tempCel) * 9/5 + 32); //calculating the temp in Fahrenheit 

    $(".heading").append("<h2>"+data.name+","+data.sys.country+"</h2>"); 

    //setting the both temp in Cel and Far as a data attr which can be used in hover event listener 
    $(".message").append("<h4 id='tempData' data-temp-cel='" + tempCel + "' data-temp-far='" + tempFar + "'>Current Temperature: "+tempCel+"&#8451</h4>"); 
    $(".message").append("<h4>Conditions: "+data.weather[0].main+"</h4>"); 

    $(".message").append("<img id='conditions' src="+iconUrl+">"); 

});   

//attaching the hover effect 
$(document).on({ 
    mouseenter: function() { 
     var tempInFar = $(this).data('temp-far'); 
     $(this).html("Current Temperature: "+tempInFar+"&#8457;"); //setting the inner html to show temp in Fahrenheit 
    }, 
    mouseleave: function() { 
     var tempInCel = $(this).data('temp-cel'); 
     $(this).html("Current Temperature: "+tempInCel+"&#8451;"); //setting the inner html to show temp in Celsius 
    } 
}, "#tempData"); 
+0

謝謝ATTR方法! 2個問題。 1)是否有必要仍然使用數據屬性,如果您只是使用tempCel和tempFar變量的值更改html? 2)你能用「#tempData」來解釋我最後一部分嗎? –

+0

@DavidLett - 1)是;它需要使用'data-'attr來存儲溫度數據,因爲HTML將通過'.getJSON'形成,並且用戶可能將鼠標懸停在HTML元素上2分鐘後可以說。也可能有一個或多個臨時數據可以通過此代碼顯示在同一頁面上。所以爲了使這個解決方案具有通用性,最好使用「數據」方法。 2)'$(document).on({...},「#tempData」);'是將事件處理程序附加到DOM元素的方式,該元素可能會或可能不會在HTML中被預設。在我們的例子中,我們正在動態構建DOM。這就是爲什麼我們使用這種方法。 – vijayP

0

嘗試在懸停上追加div來顯示數據。

$("#tempData").hover(function(){ 
     var tempIn = (tempCel * 1.8) + 32; 
     $('<div />', { 
       'class' : 'tip', 
       text : "Temp in Farenheit: " + tempIn + " F", 
       css : { 
        position: 'fixed' 
       } 
      }).appendTo(this); 
     },function(){ 
      $('.tip', this).remove(); 
     }); 

Fiddle

0

您可以使用<span>元素的<h4>孩子北部沿海地區顯示文本。將@charset設置爲"UTF-8",在css;在:hover,:after,#tempData元件組contentattr()data-temp作爲參數;設置spandisplay:none,地址爲#tempData:hover

$(document).ready(function() { 

    var long; 
    var lat; 

    $.getJSON("/path/to/resource", function(data2) { //access RESTFUL geo location API & set lattitude.longitude 
    lat = data2.lat; 
    long = data2.lon; 

    var api = "/path/to/resource/1?lat=" + lat + "&lon=" + long + "&appid=de61ccfbde0405f57d64dbb53323fccf&units=metric"; 
    //Access weather API 

    $.getJSON(api, function(data) { 

     var c = data.main.temp; 
     var f = Math.floor(c * 1.8 + 32); 
     var h4 = $("<h4></h4>", { 
      id: "tempData", 
      html: "Current Temperature: <span>" + c + "&#8451;</span></h4>", 
      "data-temp": f 
     }) 
     .appendTo("body"); 
    }); 
    }); 
}); 

@charset "UTF-8"; 
#tempData:hover:after { 
    content: attr(data-temp) "\2109"; 
} 
#tempData:hover span { 
    display: none; 
}