按JavaScript中的文档顺序对元素进行排序

bil*_*.cn 3 javascript xpath dom

我有一个Elements 数组,我希望它们按文档顺序排列.我知道在XPath中实现这一点很简单,但我必须实现的逻辑对于单个表达式来说有点复杂.

我确实找到了Node.compareDocumentPosition(),但它产生了一些不同组合的掩码,所以对于比较器来说不是很理想.

最后,我可以为数组中的所有元素添加一个随机属性,然后使用XPath再次选择它们,但如果可能,我宁愿不这样做.

Pal*_*tim 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));
Run Code Online (Sandbox Code Playgroud)
<div id="div1">Div 1
  <div id="div2">Div 2
    <div id="div3">Div 3</div>
    <div id="div4">Div 4</div>
  </div>
</div>
Run Code Online (Sandbox Code Playgroud)