我有一个Element
的数组,我希望它们按文档顺序排列。我知道在XPath中实现这一点很简单,但我必须实现的逻辑对于单个表达式来说有点复杂。
我确实找到了Node.compareDocumentPosition()
,但是它产生了一些不同组合的位掩码,因此对于比较器来说不是很理想。
最后,我可以为数组中的所有元素添加一个随机属性,然后使用XPath再次选择它们,但是如果可能的话,我宁愿不这样做。
答案 0 :(得分:10)
我不一定同意document.compareDocumentPosition()
对于比较者来说是不够的。为什么你认为这不理想?
var elementArray = [];
elementArray.push(document.getElementById('div3'));
elementArray.push(document.getElementById('div2'));
elementArray.push(document.getElementById('div4'));
elementArray.push(document.getElementById('div1'));
function documentPositionComparator (a, b) {
if (a === b) {
return 0;
}
var position = a.compareDocumentPosition(b);
if (position & Node.DOCUMENT_POSITION_FOLLOWING || position & Node.DOCUMENT_POSITION_CONTAINED_BY) {
return -1;
} else if (position & Node.DOCUMENT_POSITION_PRECEDING || position & Node.DOCUMENT_POSITION_CONTAINS) {
return 1;
} else {
return 0;
}
}
console.log('unsorted::', elementArray);
console.log('sorted::', elementArray.sort(documentPositionComparator));
<div id="div1">Div 1
<div id="div2">Div 2
<div id="div3">Div 3</div>
<div id="div4">Div 4</div>
</div>
</div>