2014-01-28 27 views
0

我正在尋找通過整個網站尋找英制單位(例如磅,英尺和英寸)並將它們轉換爲度量值,公制,米,釐米的方法。查找所有英制單位,並用其公制單位替換

例子:

<main> 
    <h1>Top speed of new car is 300mph/h</h1> 
    <p> 
    Such a fast car, previously going only 250 mph, now topping speeds up to 300mph. 
    And it only weighs 300lbs, 20 pounds less than before! 
    </p> 
</main> 

變爲:

<main> 
    <h1>Top speed of new car is 482.8km/h</h1> 
    <p> 
    Such a fast car, previously going only 402km/h, now topping speeds up to 482.8km/h. 
    And it only weighs 136kg, 9kg less than before! 
    </p> 
</main> 

的問題不是如何從英里/磅轉換成公里每小時/公斤,但如何查找和存儲值例如「10mph」,「10mph」,「200lbs」,「200lbs」,「200磅」,並將其轉換並最終替換它們。

任何指針都會非常有幫助!

編輯什麼,我想實現一個簡單的例子:

<p>This is 10 lbs</p> 
<p>This is 20lbs</p> 

<script> 
    $('p').each(function(){ 
    var text = $(this).text().toLowerCase(); 

    if(text.indexOf('lbs') >= 0) { 
     // Store "XX lbs" in a variable 
     // Wrap the above created variable in a <span> 
     // Convert the variable to kg 
     // Replace the text in <span> with the value in kilogram 
     // Output: <p>This is <span>4.5kg</span></p> 
    } 

    }); 
</script> 
+0

我想我們可能會讓你開始,但你的一些代碼可能會很好。所以假設所有的文本都是XXXlbs XXXpounds XXX,你可以用類似於variablename = $('div')。html()的方式閱讀文本,然後用js搜索單位,向後搜索前一個空格,抓取數字,做轉換,並替換文字。不是一個小小的追求。 – TimSPQR

+0

這個問題如何與Javascript/jQuery相關? – hindmost

+0

這實際上不可能通過掃描自然文本來完成。首先,考慮用'm'測量的單位。這可能是米,英里或其他幾個。不知道文本的上下文,就會產生無法解決的歧義。其次,許多單位可以用幾種方式書寫:'kph'和'km/h'是一樣的。最後,「帝國」單位的定義不明確:英國英里與美國英里不同。還有其他版本的「里程」也存在。這同樣適用於大多數其他英制單位。再次,在開始之前,您必須確定文本的上下文。 – Spudley

回答

2

那麼你可以通過建設單位應該從什麼被轉換成什麼,他們的轉化率映射開始:

var unitMapping = { 
    mph : { unit : 'km/h', ratio : 1.609 }, // there is no such thing as mph/h ? 
    lbs : { unit : 'kg', ratio : 0.45 }, 
    pounds : { unit : 'kg', ratio : 0.45 } 
}; 

現在你需要更換正確的值的文本。首先創建一個所有你的單位相匹配的正則表達式:

var regexp = new RegExp('(\\d*) ?(' + Object.keys(unitMapping).join('|') + ')', 'g'); 

寫一個聰明的替換功能,需要一個非標準單位,並返回一個標準:

var replaceFunction = function(match, value, unit){ 
    return value*unitMapping[unit].ratio + unitMapping[unit].unit; 
}; 

最後通過採取整合所有文字並用正確的版本替換它:

var replaceNode = document.querySelector('main'); 
replaceNode.innerHTML = replaceNode.innerHTML.replace(regexp, replaceFunction); 

DEMO:http://jsbin.com/UPEmEjuS/1/edit

正如你所看到的,unitMapping有一些重複。解決方案顯然可以通過使映射取決於標準化單元來改進,但是我選擇了這個選項,因爲它使得SO帖子的代碼更清晰。

+0

太好了,正是我在找的東西。謝謝! –

+0

這不適用於分數,或與使用逗號分隔無數的數字。也許'\ d +'可以擴展,'replaceFunction'可以對'value'進行解析,而不是回答'*'操作符完成的隱式string->數字強制。 –

1

無恥插頭:webpage-unit-conversion

JavaScript代碼可嵌入到網頁中,以單位轉換頁面公制(SI)單位與英國帝國/美國單位之間,以及CSS,允許靈活選擇顯示哪些單位。

有一個demo頁面顯示它是如何工作的。它有一些偏見,例如假定「度」是指溫度而不是角度。

相關問題