0
我現在有一個看起來像這樣的UL名單:PHP排序DOM元素和替換
<ul id="primary-nav">
<li class="navButton" id="amps_off_button" data-order="6">
<span class="navButton-color red"><p>AMPS Off</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="amps_alarms" data-order="7">
<span class="navButton-color"><p>AMPS Alarms</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="sysConfig" data-order="3">
<span class="navButton-color"><p>System Configuration</p></span>
<span class="glare"></span></li>
<li class="navButton" id="system" data-order="4">
<span class="navButton-color"><p>System</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="backBtn" data-order="100">
<span class="navButton-color"><p>BACK</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="rescan" data-order="101">
<span class="navButton-color"><p>ReScan</p></span>
<span class="glare"></span>
</li>
</ul>
在我的導航類的,我有一個可以調用的函數將被排序的無序列表的順序數據順序中的值:
public function setOrder() {
$liNodeList = $this->xpath->query("//ul[@id='primary-nav']//li");
$liNodes = iterator_to_array($liNodeList);
usort($liNodes, array('Navigation', 'sortListByOrderAttr'));
if ($liNodeList->length == count($liNodes)) {
for ($i = 0; $i < $liNodeList->length; $i++) {
$node = $liNodeList->item($i);
$newNode = $liNodes[$i];
$node->parentNode->replaceChild($newNode, $node);
}
}
else echo "error";
}
private static function sortListByOrderAttr($a, $b) {
return (int) $a->getAttribute('data-order') - (int) $b->getAttribute('data-order');
}
由於某些原因,我沒有得到正確的列表順序。相反,輸出顯示4項,而不是6個項目它應該顯示:
<ul id="primary-nav">
<li class="navButton" id="amps_off_button" data-order="6">
<span class="navButton-color red"><p>AMPS Off</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="amps_alarms" data-order="7">
<span class="navButton-color"><p>AMPS Alarms</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="backBtn" data-order="100">
<span class="navButton-color"><p>BACK</p></span>
<span class="glare"></span>
</li>
<li class="navButton" id="rescan" data-order="101">
<span class="navButton-color"><p>ReScan</p></span>
<span class="glare"></span>
</li>
</ul>
這裏我懷疑我的問題是,我$node->parentNode->replaceChild($newNode, $node);
沒有ES布埃諾。也許我需要一個不同的方法來排序呢?幫助讚賞!
你覺得呢'replaceChild'呢? – cHao
不知道你是諷刺還是真實。 – JayZiggaZeus
我真實。那麼,Socratically真實。 – cHao