2010-04-16 18 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

相关问题