2017-08-26 130 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之前 –