2017-08-26 125 views
0

我正在按字母順序篩選表並且遇到問題。我不明白x.innerHTML > y.innerHTML概念在這個代碼:如何比較innerHTML(JavaScript中的字符串比較)

table = document.getElementById('myTable'); 
rows = table.getElementsByTagName('tr'); 
x = rows[1].getElementsByTagName('td')[0]; 
y = rows[2].getElementsByTagName('td')[0]; 
//check if the two rows should switch place: 
console.log(x.innerHTML.length, y.innerHTML.length); 
console.log(x.innerHTML > y.innerHTML); 

它是如何工作的?

+0

可能的重複[在JavaScript中比較字符串時爲什麼一個字符串比另一個大?](https://stackoverflow.com/questions/7087811/why-is-one-string-greater-than-the-other - 當比較字符串在JavaScript) – jmargolisvt

+0

僅供參考,你不需要'getElementsByTagName'那裏。 'table.rows [1] .cells [0]'也可以。 – spanky

回答

5

innerHTML返回一個字符串,所以你只要比較兩個字符串:

"albert" < "boby" // true 

ECMAScript Language Specification

字符串比較使用的代碼單元值序列簡單的字典序。沒有試圖使用Unicode規範中定義的更復雜,面向語義的字符或字符串相等性和整理順序的定義。因此,根據Unicode標準規範地相等的字符串值可能會測試爲不相等。實際上,該算法假定兩個字符串都已經處於標準化形式。另請注意,對於包含補充字符的字符串,UTF-16代碼單元值序列的字典順序與代碼點值序列的字典順序不同。

+0

@JamesDouglas我從規範 –

1

x.innerHTMLy.innerHTML,因此,如果您希望自己作爲一個數值,你需要圍繞他們​​如下:

Number(x.innerHTML)>Number(y.innerHTML) 

否則,您比較兩個字符串用不平等,電腦採取不同的方式,如上面的另一個答案所示。

+1

添加了一個註釋基本上,在JS中,「a」<「b」// true「但是」b「<」a「// false,因爲a在字母b之前 –