JavaScript Array.prototype.sort() 无法调用 DOM.HTMLLIElements
JavaScript Array.prototype.sort() CAN NOT call on DOM.HTMLLIElements
我想用Array.prototype.sort()
来排序DOM.Element。
我这样试:
var e = document.getElementById('test-list').children;
[].forEach.call(e,function(ee){
console.log(ee);
});
// print each child in e
[].sort.call([3,4,1],function(a,b){
console.log(a+","+b);
});
// 3,4; 4,1; [3, 4, 1]; compares every two elements
[].sort.call(e,function(a,b){
console.log(a+","+b);
});
// CAN NOT work! don't print anything.
<ol id="test-list">
<li class="lang">Scheme</li>
<li class="lang">JavaScript</li>
<li class="lang">Python</li>
<li class="lang">Ruby</li>
<li class="lang">Haskell</li>
</ol>
在Array.prototype.sort()
的API的基础上,sort()
可以用于普通对象而不是基本类型。
我找到了
e[0].innerText = 232; // <li class="lang">232</li> ;works
e[0] = "123"; //<li class="lang">232</li> ;not work
所以我假设是因为不能直接更改 HTMLLIElements 数组中的元素,sort()
以某种方式弄明白了。所以sort()
直接跳出来return。
是吗?又是什么机构帮助sort()
决定是否处理Array?
有趣的问题!不像 Chrome 默默死去,最新的 Firefox 更有帮助:
TypeError: HTMLCollection doesn't have an indexed property setter for '0'
这使问题变得清晰:您不能将 sort
应用于没有数字 属性 setter 的对象(因为 sort
尝试就地排序但失败了)。
我想用Array.prototype.sort()
来排序DOM.Element。
我这样试:
var e = document.getElementById('test-list').children;
[].forEach.call(e,function(ee){
console.log(ee);
});
// print each child in e
[].sort.call([3,4,1],function(a,b){
console.log(a+","+b);
});
// 3,4; 4,1; [3, 4, 1]; compares every two elements
[].sort.call(e,function(a,b){
console.log(a+","+b);
});
// CAN NOT work! don't print anything.
<ol id="test-list">
<li class="lang">Scheme</li>
<li class="lang">JavaScript</li>
<li class="lang">Python</li>
<li class="lang">Ruby</li>
<li class="lang">Haskell</li>
</ol>
在Array.prototype.sort()
的API的基础上,sort()
可以用于普通对象而不是基本类型。
我找到了
e[0].innerText = 232; // <li class="lang">232</li> ;works
e[0] = "123"; //<li class="lang">232</li> ;not work
所以我假设是因为不能直接更改 HTMLLIElements 数组中的元素,sort()
以某种方式弄明白了。所以sort()
直接跳出来return。
是吗?又是什么机构帮助sort()
决定是否处理Array?
有趣的问题!不像 Chrome 默默死去,最新的 Firefox 更有帮助:
TypeError: HTMLCollection doesn't have an indexed property setter for '0'
这使问题变得清晰:您不能将 sort
应用于没有数字 属性 setter 的对象(因为 sort
尝试就地排序但失败了)。