2010-01-29 147 views
1

如何使用parseInt()函数从短语对象中获取短语编号?我试图在交换FE功能var phrasenum下面创建函数,但它不起作用。我认为我的价值观是错误的。我应该放什么呢?任何帮助将不胜感激。提前致谢!以下是法文词组号(1-10或在JavaScript 0-9)和法国的英语短语使用:需要parseInt()函数的帮助

> var english=new Array(); 
english[0]="This hotel isn't far from the Eiffel Tower."; 
english[1]="What time does the train arrive?"; 
english[2]="We have been waiting for the bus for one half-hour."; 
english[3]="This meal is delicious"; 
english[4]="What day is she going to arrive?"; 
english[5]="We have eleven minutes before the train leaves!"; 
english[6]="Living in a foreign country is a good experience."; 
english[7]="Excuse me! I'm late!"; 
english[8]="Is this taxi free?"; 
english[9]="Be careful when you go down the steps."; 

var french=new Array(); 
french[0]="Cet hôtel n'est pas loin de la Tour Eiffel."; 
french[1]="A quelle heure arrive le train?"; 
french[2]="Nous attendons l'autobus depuis une demi-heure."; 
french[3]="Ce repas est délicieux"; 
french[4]="Quel jour va-t-elle arriver?"; 
french[5]="Nous avons onze minutes avant le départ du train!"; 
french[6]="Habiter dans un pays étranger est une bonne expérience."; 
french[7]="Excusez-moi! Je suis en retard!"; 
french[8]="Est-ce que ce taxi est libre?"; 
french[9]="Faites attention quand vous descendez l'escalier."; 

这里是我的工作职能:

function setUpTranslation() { 
    var phrases = document.getElementsByTagName("p"); 

    for (i = 0; i<phrases.length; i++) { 
     phrases[i].number = i; 
     phrases[i].childNodes[1].innerHTML = french[i]; 

     phrases[i].childNodes[1].onmousedown = function() { swapFE(event); }; 
    } 

} 

function swapFE(e) { 
     var phrase = e.srcElement; 

     var phrasenum = parseInt(phrase[1].childNodes[1].innerText); 

     alert("French Number = "+phrasenum+"Phrase = "+phrase.childNodes[1]); 
} 
+0

这看起来像是在试图将法语数字翻译成英语。据我所知,法国24号是24号 - 不需要翻译。你究竟想要完成什么?你能举一个输入数据的例子吗? – slebetman 2010-01-29 06:36:23

+0

这个数字是怎样的?有千分离器? – CMS 2010-01-29 06:36:48

+0

@slebetman和@CMS - 我在上面的问题中添加了法语和英语数组,以查看是否有帮助。 – Ashley 2010-01-29 16:27:43

回答

3

这是我想出了答案,它的工作。见var phrasenum。感谢您的帮助!

//this function changes the French phrase to an English phrase. 
    function swapFE(e) { 
      var phrase = e.srcElement; 
      //phrase.innerText = english[phrase.id]; 
      var parent = phrase.parentNode; 
      //childNodes[0] is the number of the phrase +1 
      var idnum = parent.childNodes[0]; 
      //parseInt takes a textstring and extracts it to make a number. Then you will subtract 1 from the number. 
      var phrasenum = parseInt(idnum.innerHTML)-1; 
      phrase.innerText = english[phrasenum]; 


    } 


function swapEF(e) { 
     var phrase = e.srcElement; 
     //phrase.innerText = english[phrase.id]; 
     var parent = phrase.parentNode; 
     var idnum = parent.childNodes[0]; 
     var phrasenum = parseInt(idnum.innerHTML)-1; 
     phrase.innerText = french[phrasenum]; 

} 
2

我不确定你的实施出了什么问题。但是,如果它是parseInt的返回值看起来不正确,也许你应该尝试将字符串和字符串一起作为输入。例如

var phrasenum = parseInt(phrase[1].childNodes[1].innerText, 10); 
+0

@ shinkou-我试过了,但没有奏效。我明白你的意思,但包括一个基地。不管怎么说,还是要谢谢你。 – Ashley 2010-01-29 21:43:39

+0

是的,您应该始终使用parseInt()的基数(基数),或者根据第一个数字将数字误解为二进制,八进制等。 – JAL 2010-01-31 02:24:57

1

使用parseInt()有一些缺陷。也许你应该粘贴一些你工作不正常的例子。但是,下面的例子应该给你一些想法(希望):

// working examples 
parseInt("7"); // 7 
parseInt("8"); // 8 
parseInt("9"); // 9 

// oops ... 
parseInt("07"); // 7 
parseInt("08"); // 0 
parseInt("09"); // 0 

// should always give base 
parseInt("07", 10); // 7 
parseInt("08", 10); // 8 
parseInt("09", 10); // 9 

还应该帮助检查规格:15.1.2.2 parseInt(string , radix)

+0

我不认为07是一个八进制数。 – rahul 2010-01-29 06:42:02

+0

@脉搏,你是什么意思?我的“哎呀......”仅仅意味着8和9。 – bryantsai 2010-01-29 06:46:29

3

使用parseInt的其他一些缺陷:

// As bryantsai and shinkou mentioned, not using the radix/base 
parseInt("08");  // result is 0 
parseInt("08", 10); // result is 8 

// Thousands separator: 
parseInt("1,000"); // result is 1 
parseInt("1,000".replace(",","")); // result is 1000 

// Foreign decimal separator 
parseInt("2,5"); // result is 2; 
parseInt("2,5".replace(",",".")); // result is still 2 
parseFloat("2,5".replace(",",".")); // result is now 2.5 

// Finally, using the (+) operator instead of parseInt/parseFloat 
+"2";  // result is 2 
+"08"; // result is 8 
+"1.5"; // result is 1.5 
+"1,000"; // result is NaN - cannot parse thousand separators 
+"1,5"; // result is NaN - decimal point must be a . 

有时使用+运算符进行投射是一种更好的方法,因为无效的数字字符串将始终给出NaN,而parseInt并不是这种情况,如果字符串以1开头,则始终会返回一个数字。

0

parseInt以数字的文本表示形式输出一个数字作为整数。

你不想这样做。

更改您的代码是这样的:

function swapFE(e) { 
    var phrase = e.srcElement; 

    alert("French Number = "+this.parent.number+"Phrase = "+phrase.childNodes[1]); 
} 

在函数在此之前,您设置phrases[i].number = i;phrases[i].childNodes[1].onmousedown = function() { swapFE(event); };

这意味着childNode的母公司持有的语句是作为指数显示。如果this.parent.number不起作用,请尝试phrase.number

更新 这是我会怎么实现你想要的:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"> 
<html> 
<head> 
    <META HTTP-EQUIV="Content-Type" CONTENT="text/html; charset=ISO-8859-1"> 
    <title>test page</title> 
    <script> 
     var english=[]; 
     english[0]="This hotel isn't far from the Eiffel Tower."; 
     english[1]="What time does the train arrive?"; 
     english[2]="We have been waiting for the bus for one half-hour."; 
     english[3]="This meal is delicious"; 
     english[4]="What day is she going to arrive?"; 
     english[5]="We have eleven minutes before the train leaves!"; 
     english[6]="Living in a foreign country is a good experience."; 
     english[7]="Excuse me! I'm late!"; 
     english[8]="Is this taxi free?"; 
     english[9]="Be careful when you go down the steps."; 

     var french=[]; 
     french[0]="Cet hôtel n'est pas loin de la Tour Eiffel."; 
     french[1]="A quelle heure arrive le train?"; 
     french[2]="Nous attendons l'autobus depuis une demi-heure."; 
     french[3]="Ce repas est délicieux"; 
     french[4]="Quel jour va-t-elle arriver?"; 
     french[5]="Nous avons onze minutes avant le départ du train!"; 
     french[6]="Habiter dans un pays étranger est une bonne expérience."; 
     french[7]="Excusez-moi! Je suis en retard!"; 
     french[8]="Est-ce que ce taxi est libre?"; 
     french[9]="Faites attention quand vous descendez l'escalier."; 

     function pageLoad() 
     { 
      var main = document.getElementById("main"); 
      for(var i = 0; i < french.length; ++i) 
      { 
       var p = document.createElement("p"); 
       p.number = i; 
       var text = document.createTextNode(french[i]); 
       p.appendChild(text); 
       hookEvent(p, "mousedown", swapFE); 
       main.appendChild(p); 
      } 
     } 

     function swapFE() 
     { 
      alert("French Number = "+this.number+" Phrase = "+this.firstChild.nodeValue); 
     } 

     function hookEvent(element, eventName, callback) 
     { 
      if(typeof(element) == "string") 
       element = document.getElementById(element); 
      if(element == null) 
       return; 
      if(element.addEventListener) 
      { 
       if(eventName == 'mousewheel') 
        element.addEventListener('DOMMouseScroll', callback, false); 
       element.addEventListener(eventName, callback, false); 
      } 
      else if(element.attachEvent) 
       element.attachEvent("on" + eventName, callback); 
     } 
    </script> 
</head> 
<body onload="pageLoad()"> 
    <div id="main"> 
    </div> 
</body> 
<html> 
+0

@Matt Ellen - 我需要为我的任务使用parseInt函数。感谢您的输入。 – Ashley 2010-01-31 01:46:26

+0

不用担心。对不起,我无法帮助 – 2010-01-31 15:42:33