2010-01-29 76 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