我想知道如何知道節點是否是另一個節點的最後一個孩子。DOM:用PHP,如何弄清楚節點是否是父節點的最後一個孩子
我知道如何檢索父母的lastChild
名稱($node->parentNode->lastChild->nodeName
),但由於有時同一父母中有許多相同的節點名稱,因此該名稱肯定不是找到最後一個孩子的方式。
我正在尋找某種類型的迭代器,它可以檢索子元素的數量,並根據當前節點的位置判斷當前節點是否是最後一個子元素。
謝謝!
我想知道如何知道節點是否是另一個節點的最後一個孩子。DOM:用PHP,如何弄清楚節點是否是父節點的最後一個孩子
我知道如何檢索父母的lastChild
名稱($node->parentNode->lastChild->nodeName
),但由於有時同一父母中有許多相同的節點名稱,因此該名稱肯定不是找到最後一個孩子的方式。
我正在尋找某種類型的迭代器,它可以檢索子元素的數量,並根據當前節點的位置判斷當前節點是否是最後一個子元素。
謝謝!
純DOM術語中,如果孩子是父母的最後一個孩子,其nextSibling
屬性將爲null
。
JavaScript示例(不是你要找的Javascript專門):
if (!child.nextSibling) {
// It's the last child
}
需要注意的是nextSibling
穿越節點是很重要的。有時你想要遍歷元素而不是文本節點等。例如,在此標記:
<p>Testing <span>one</span> two three</p>
...的span
不在其容器中的最後一個節點(因爲它後跟一個文本節點),但它在其容器中的最後一個元素。如果你想尋找的是,你需要一個循環檢查nodeType
,如:
// =====
// Note: This example is in JavaScript, but I assume it's easy enough
// to follow what it's doing and translate it to PHP
// =====
// Utility function
function nextElement(node) {
var rv = node.nextSibling;
while (rv && rv.nodeType !== 1) {
rv = rv.nextSibling;
}
return rv;
}
// Usage
if (!nextElement(child)) {
// There was no element after `child`
}
由於這是一個PHP的問題,我會留下一個PHP的答案(使用DOM)爲後人:
if ($node->isSameNode($node->parentNode->lastChild))
{
//...
}
如果您使用SimpleXML,只需將您的節點轉換爲dom_import_simplexml()即可。
抱歉,我想感謝您的提示;) – Bacon 2010-04-29 08:46:22
重新登錄PHP標籤:這個問題與PHP無關,是嗎?它是客戶端DOM,還是我錯過了這一點? – 2010-04-16 11:09:50
@ T.J .:哪一種客戶端語言在'$ node'中使用$ -notation作爲變量? ;-) – VolkerK 2010-04-16 11:11:01
@ VolkerK:我認爲這是速記。如果這是一個PHP的東西,我最好消失。 :-)(編輯:嘿,我想我很幸運,顯然無論它是一個有用的答案,因爲DOM是DOM,無論位置如何。) – 2010-04-16 11:11:49