2010-04-16 113 views
-1

我想知道如何知道節點是否是另一個節點的最後一個孩子。DOM:用PHP,如何弄清楚節點是否是父節點的最後一個孩子

我知道如何檢索父母的lastChild名稱($node->parentNode->lastChild->nodeName),但由於有時同一父母中有許多相同的節點名稱,因此該名稱肯定不是找到最後一個孩子的方式。

我正在尋找某種類型的迭代器,它可以檢索子元素的數量,並根據當前節點的位置判斷當前節點是否是最後一個子元素。

謝謝!

+0

重新登錄PHP標籤:這個問題與PHP無關,是嗎?它是客戶端DOM,還是我錯過了這一點? – 2010-04-16 11:09:50

+0

@ T.J .:哪一種客戶端語言在'$ node'中使用$ -notation作爲變量? ;-) – VolkerK 2010-04-16 11:11:01

+0

@ VolkerK:我認爲這是速記。如果這是一個PHP的東西,我最好消失。 :-)(編輯:嘿,我想我很幸運,顯然無論它是一個有用的答案,因爲DOM是DOM,無論位置如何。) – 2010-04-16 11:11:49

回答

2

純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` 
} 
+0

是的,這是一個很好的解決方案,非常感謝你:) – Bacon 2010-04-16 11:11:41

+0

@Bacon:很酷!對不起,如果我誤讀客戶端的東西,但至少DOM是DOM不管... – 2010-04-16 11:13:46

+0

你也可以做_ $節點=== $ node-> parentNode-> lastChild_ – goat 2010-04-16 17:43:54

1

由於這是一個PHP的問題,我會留下一個PHP的答案(使用DOM)爲後人:

if ($node->isSameNode($node->parentNode->lastChild)) 
{ 
    //... 
} 

如果您使用SimpleXML,只需將您的節點轉換爲dom_import_simplexml()即可。

+0

抱歉,我想感謝您的提示;) – Bacon 2010-04-29 08:46:22

相關問題