2009-11-12 53 views
0

我正在爲包含多種語言內容的網站開發一些JavaScript。我想使用谷歌翻譯API來允許用戶選擇一個詞(或短語)並自動提供翻譯。目前,我只是讓它提醒測試結果。用谷歌翻譯API(和jQuery)翻譯用戶選擇的文本

這是我到目前爲止有: 的google.load( 「語言」, 「1」);

function getSelection() { 
    var selection = (!!document.getSelection) ? document.getSelection() : 
      (!!window.getSelection) ? window.getSelection() : 
      document.selection.createRange().text; 
    if (selection.text) 
     selection = selection.text 
    console.log(selection); 
    return selection 
} 

$(document).ready(function() {  
    $(window).mouseup(function() { 
     var selection = getSelection(); 
     if (selection != "") { 
      google.language.translate(selection, "", "en", function(result) { 
       if (!result.error) { 
        alert(result.translation); 
       } else { 
        alert(result.error); 
       } 
      }); 
     } 
    }); 
}); 

,我快到的問題是,我的getSelection()函數返回一個Range對象,這與谷歌的language.translate()函數顯然是不相容的。我真正需要的是一種從Range中檢索實際文本的方式,作爲一個字符串,所以我可以通過它。據我所知,有一些非常簡單,明顯的方法可以做到這一點,我只是缺少(是的,我嘗試使用selection.text),但我對JavaScript的使用經驗有限,Google搜索它沒有透露任何有用的信息。

任何人都可以幫忙嗎?

回答

1

不出所料,有一個非常明顯的答案,我完全錯過了。 selection.toString()...

+1

這是臨界的,但你仍然應該給予自己臭名昭着的發問者 - 誰有答案 - 但 - 唉 - 腦 - 是 - Tricky - 東西;-) +1爲您評論! – 2010-01-12 01:51:06

1

你可以做這樣的事情:

function getSelection() { 
    var selection = window.getSelection ? window.getSelection() + '' 
             : document.selection.createRange().text; 
    return selection 
} 

通過連接一個空字符串爲getSelection()方法的結果,它的價值被轉換成字符串,這是一個共同的短 - 手,相當於調用toString方法,這是因爲:

var test = { 
    toString: function() { 
    return 'foo'; 
    } 
}; 

test+'' == 'foo'; // true 

你也不必在三元使用雙邏輯否定(!!),因爲第一個操作數的情況下,其自動轉換爲布爾。

+0

啊,很高興知道。謝謝! – 2009-11-12 02:14:41