2017-06-16 67 views
5

我想通過單擊表格標題對HTML中的表格進行排序。對字符串進行排序很合適,但比較數字時,它會評估「10」<「2」。顯然,我正在比較字符串,但我無法從我的表格單元格中獲取數字。這裏是發生了什麼事的工作示例:無法在JavaScript中將輸入文本轉換爲int

<script type="text/javascript" > 
     function sortBy() { 
      var table = document.getElementById("table"); 
      var rows = table.getElementsByTagName("tr"); 
      var number = rows[1].getElementsByTagName("td")[0].innerHTML; 
      document.write(number); // This should be printing "7". 
     } 
</script> 

<?php 
     echo "<table id='table'> 
     <thead><tr><th onclick='sortBy()'>CLICK ME</th></thead></tr> 
     <tbody><td><input readonly value='7'></td></tbody>"; 
?> 

在這個例子中,我試圖讓整數7。我試過parseInt(number),但是評估結果爲NaN,所以我試着寫出number是什麼,它打印的是文本字段而不是文本字段的內容。我已通過打印number.length進行了檢查,並且我得到了29,而不是1。我試過number.value但是那是undefined

我試過用.value代替.innerHTML,但那也是undefined

有什麼辦法可以將它轉換成數字嗎?或者至少剝離html標籤等?我意識到我可以使用字符串來構建我自己的比較邏輯,並且它的長度(如果(A.length> B.length){A的更大} else {與普通的}比較),但是這很混亂,並且不會幫助我理解這個問題。

+0

看看https://stackoverflow.com/questions/14617221/need-to-convert-result-of-innerhtml-to-number-on-javascript –

+4

你應該選擇'' ,**不** **'​​'。這就是爲什麼你得到'NaN'。你需要追加另一個'getElementsByTagName(..)[0]'來獲得輸入,然後你得到它的'value' attr。 – RompePC

+1

@RompePC您應該將其作爲答案發布,而不是發表評論。 – krillgar

回答

7

問題是你沒有選擇正確的標籤;您需要爲保存該值的<input>添加一個選擇器。

function sortBy() { 
    var table = document.getElementById("table"); 
    var rows = table.getElementsByTagName("tr"); 
    var number = rows[1].getElementsByTagName("td")[0].getElementsByTagName("input")[0].getAttribute("value"); 
    document.write(number); // This should be printing "7". 
} 
1

使用Element.getAttributeparseInt以便檢索和正確地分析值:

var number = rows[1].getElementsByTagName("td")[0].getAttribute('value') 
document.write(parseInt(number)); 
1

除了表的結構需要一些修正,通過使用innerHTML功能你會說td標記包含輸出的一切。
要糾正的JavaScript代碼,我會建議使用查詢選擇如下:

function sortBy() { 
 
    var table = document.getElementById("table"); 
 
    var rows = table.getElementsByTagName("tr"); 
 
    var number = rows[1].querySelector("td > input").value; 
 
    console.log(number); 
 
}
<table id='table'> 
 
    <thead> 
 
    <tr> 
 
     <th onclick='sortBy()'>CLICK ME</th> 
 
    </tr> 
 
    </thead> 
 
    <tbody> 
 
    <tr> 
 
     <td><input readonly value='7'></td> 
 
    </tr> 
 
    </tbody> 
 
</table>

1

你可以嘗試使用​​函數來創建從字符串值的新號碼包裝類。即使該值實際上是一個數字,這應該繼續工作。

<script type="text/javascript" > 
     function sortBy() { 
      var table = document.getElementById("table"); 
      var rows = table.getElementsByTagName("tr"); 
      var number = rows[1].getElementsByTagName("td")[0].innerHTML; 
      document.write(Number(number)); // This should be printing "7". 
     } 
</script> 

<?php 
     echo "<table id='table'> 
     <thead><tr><th onclick='sortBy()'>CLICK ME</th></thead></tr> 
     <tbody><td><input readonly value='7'></td></tbody>"; 
?> 

閱讀更多的MDN documentation頁面。

+0

有趣的是,它不適合我。我認爲問題不在於轉換。也許你應該使用'.value'而不是'.innerHTML'來選擇數字。 – RaindeerKernel