2009-12-04 174 views
0

我有以下诗情:如何迭代div?

<div class="maindiv"> 
    <div class="msg">some text</div> 
        ... 
    <div class="msg">some other text</div> 
</div> 

我想借此每个“味精”类的div的文本和使用谷歌API翻译。

我做了以下JS功能:

function translateTimeline(){ 

var lang = $('#timelineLenguage').val(); 
var translation; 
    $(".msg").each(
    function(i){ 
       translation=google.language.translate($(this).text(), "", lang, 
       function(result) { 
        if (!result.error) { 

         $(this).text(result.translation); 
        }else{ 
         alert('Cannot translate tweet. Try again later'); 
        } 
       }); 

    }); 
return false; 
}; 

这是不工作..

这是所有我可以用我有限的JS/jQuery的技能使..

THX提前为您的帮助和时间:)

+1

它怎么不起作用?没有效果吗?翻译错了?你是否在else块中得到错误信息? – 2009-12-04 14:57:53

回答

1

我从来没有与google.language APIs发挥,这是一个有趣的练习。基本上它是一个将.msg项目翻译成另一种语言的工具。我不确定如果API改变会有多脆弱,但它似乎工作得很好。请注意,这不会保留原始文本,所以如果您多次翻译翻译质量“降级”。看看我是如何做translateWithGoogle()函数的,我想这会告诉你自己的代码。我尽可能精简了它。

<html> 
<head> 
<script type="text/javascript" src="http://www.google.com/jsapi"></script> 
<script type="text/javascript"> 

google.load("jquery", "1.3.2"); 
google.load("language", "1"); 

function translateWithGoogle(context, fromLang, toLang) { 
    google.language.translate($(context).text(), fromLang, toLang, 
     function(result) { 
     if (!result.error) { 
      $(context).text(result.translation); 
     } 
    }); 
} 
function translateTimeline() { 
    var fromLang = $('#currentLang').text(); 
    var toLang = $('#targetLang').val() 
    $('.msg').each(function() { 
     translateWithGoogle(this, fromLang, toLang); 
    }); 
    $('#currentLang').text(toLang); 
} 

$(document).ready(function(){ 
    $('#targetLang').bind('change', function(){ 
     translateTimeline(); 
    }); 
}); 
</script> 
</head> 
<body> 
<div class="maindiv"> 
    <div class="msg">some text</div> 
    <div class="msg">some other text</div> 
    <div class="msg">hello world</div> 
    <div class="msg">my stack has overflowed!</div> 
</div> 
<hr /> 
<span id="currentLang">en</span> 
<select id="targetLang"> 
    <option value="af">Afrikaans</option> 
    <option value="sq">Albanian</option> 
    <option value="ar">Arabic</option> 
    <option value="be">Belarusian</option> 
    <option value="bg">Bulgarian</option> 
    <option value="ca">Catalan</option> 
    <option value="zh-CN">Chinese</option> 
    <option value="hr">Croatian</option> 
    <option value="cs">Czech</option> 
    <option value="da">Danish</option> 
    <option value="nl">Dutch</option> 
    <option value="en">English</option> 
    <option value="et">Estonian</option> 
    <option value="tl">Filipino</option> 
    <option value="fi">Finnish</option> 
    <option value="fr">French</option> 
    <option value="gl">Galician</option> 
    <option value="de">German</option> 
    <option value="el">Greek</option> 
    <option value="iw">Hebrew</option> 
    <option value="hi">Hindi</option> 
    <option value="hu">Hungarian</option> 
    <option value="is">Icelandic</option> 
    <option value="id">Indonesian</option> 
    <option value="ga">Irish</option> 
    <option value="it">Italian</option> 
    <option value="ja">Japanese</option> 
    <option value="ko">Korean</option> 
    <option value="lv">Latvian</option> 
    <option value="lt">Lithuanian</option> 
    <option value="mk">Macedonian</option> 
    <option value="ms">Malay</option> 
    <option value="mt">Maltese</option> 
    <option value="no">Norwegian</option> 
    <option value="fa">Persian</option> 
    <option value="pl">Polish</option> 
    <option value="pt">Portuguese</option> 
    <option value="ro">Romanian</option> 
    <option value="ru">Russian</option> 
    <option value="sr">Serbian</option> 
    <option value="sk">Slovak</option> 
    <option value="sl">Slovenian</option> 
    <option value="es">Spanish</option> 
    <option value="sw">Swahili</option> 
    <option value="sv">Swedish</option> 
    <option value="th">Thai</option> 
    <option value="tr">Turkish</option> 
    <option value="uk">Ukrainian</option> 
    <option value="vi">Vietnamese</option> 
    <option value="cy">Welsh</option> 
    <option value="yi">Yiddish</option> 
</select> 

</body> 
</html> 
+0

工作奇迹!thx很多!:) – mcabral 2009-12-04 17:58:46

+0

就像我说的,这是一个很好的练习 - 我很乐意帮助! – artlung 2009-12-04 18:12:22

0

myabe尝试

$(this).html() 

代替

$(this).text() 
+0

text()在这里是合适的方法。谷歌translater是不感兴趣的任何HTML标签。 – Magnar 2009-12-04 15:26:19

+0

已经尝试过这一个,同样的问题:(感谢您的输入:) – mcabral 2009-12-04 17:58:04

0

这可能是因为你拼写的语言错行:

lang = $('#timelineLenguage').val(); 

如果不是它,你需要提供关于正在发生的事情的更多细节。

+0

感谢您的答案。是的,那里有一个错字,但那不是:( – mcabral 2009-12-04 17:57:25

0

您确定下面一行中的“this”指向正确的对象吗?它不是指向窗口吗?

$(this).text(result.translation); 

试试这个:

function translateTimeline(){ 

    var lang = $('#timelineLenguage').val(); 
    var translation; 
    $(".msg").each(
    function(i){ 
     var me = this; /*CHANGED*/ 
     translation=google.language.translate($(this).text(), "", lang, 
      function(result) { 
       if (!result.error) { 
        $(me).text(result.translation); /*CHANGED*/ 
       }else{ 
        alert('Cannot translate tweet. Try again later'); 
       } 
      } 
     ); 
    }); 
    return false; 
}; 
+0

复制和粘贴,但没有运气:( thx你的时间:) – mcabral 2009-12-04 17:59:54

+0

对不起,它没有工作 – 2009-12-07 14:36:23