以下のスニペットの SPAN タグを使用して、各リスト項目からの距離をマイル単位で表示したいのですが、方法がわかりません。スクリプトはうまくソートされ、すでに距離を計算していますが、それをページに書き込む方法がわかりません。これはかなり簡単だと思うので、誰かが私を助けてくれることを願っています!
<li>
<div class="name">
Moe Bar <span class="miles"></span></div>
<div class="long">
47.60357999999998</div>
<div class="lat">
-122.329454</div>
</li>
http://demos.thebeebs.co.uk/bars-in-seattle/の完全なコード の動作例
<!DOCTYPE html>
<html>
<head>
<title>Local Bars</title>
<script src="http://ajax.microsoft.com/ajax/jquery/jquery-1.5.min.js"></script>
<script>
function findMe() {
if (navigator.geolocation != undefined) {
navigator.geolocation.watchPosition(onFound, onError);
}
}
function onFound(pos) {
var userLat = pos.coords.latitude;
var userLong = pos.coords.longitude;
$('ul li').each(function (index) {
var locationLat = $(this).find('.lat').html();
var locationLong = $(this).find('.long').html();
var distance = getDistance(userLat, locationLat, userLong, locationLong);
$(this).data("distance", distance);
})
reOrder();
}
function onError(pos) {
alert("Something Went wrong");
}
function reOrder() {
$('ul li').sort(sortAlpha).appendTo('ul');
}
function sortAlpha(a, b) {
return $(a).data('distance') > $(b).data('distance') ? 1 : -1;
};
function getDistance(lat1, lat2, lon1, lon2) {
var R = 6371; // km
var d = Math.acos(Math.sin(lat1) * Math.sin(lat2) +
Math.cos(lat1) * Math.cos(lat2) *
Math.cos(lon2 - lon1)) * R;
return d;
};
</script>
<style>
ul .long, ul .lat
{
display: none;
}
</style>
</head>
<body>
<div>
<a href="#" onclick="findMe()">Find Closest Pub</a>
<ul>
<li>
<div class="name">
Moe Bar</div>
<div class="long">
47.60357999999998</div>
<div class="lat">
-122.329454</div>
</li>
<li>
<div class="name">
Frontier Room</div>
<div class="long">
47.61469022047056</div>
<div class="lat">
-122.34816509008769</div>
</li>
<li>
<div class="name">
See Sound</div>
<div class="long">
47.6156159656448</div>
<div class="lat">
-122.32593494177237</div>
</li>
</ul>
</div>
</body>
</html>