在IE8中获得div的最后一个孩子?

有没有另一种方法来获取div元素的最后一个子元素而不是使用div:last-child ,它至少在IE8中不起作用?

在jQuery中很简单:

 $("div :last-child") 

在纯CSS中,它无法完成。

否则你会遇到在Javascript中遍历DOM的问题。

另请注意区别:

  • "div :last-child" :div的最后一个孩子; 和
  • "div:last-child" :每个div 都是最后一个孩子。

不幸的是,我不知道如何在不使用的情况下在CSS中执行此操作:last-child,(如您所述)在IE中失败。

如果您正在谈论javascript,那么可以使用Node.lastChild:

 var div = document.getElementById("mydiv"); var lastChild = div.lastChild; 

使用jQuery查找适当的元素: $("div:last-child").addClass("last-child");

然后使用CSS指定演示文稿: div .last-child { /* your rules */ }

您可以以编程方式分配“最后”类,然后选择该类或使用javascript。 你可能也会使用一些微软IE浏览器只有css脚本的东西。 但我不太了解他们,也不认为这是一个选择。

我通过循环回目标元素的lastChild中的节点来使用纯JavaScript执行此操作。 如果你的HTML中有空格,那么lastChild可能是一个文本节点,所以我们循环直到找到一个元素节点(节点类型1)或者直到我们用完节点(previousSibling将返回null)。

例如,要查找页面中的最后一个元素,我从body的lastChild循环回来:

 var targetElement = document.getElementsByTagName("body")[0], lastChildElement = targetElement.lastChild; while (lastChildElement && lastChildElement.nodeType !== 1) { lastChildElement = lastChildElement.previousSibling; } if (lastChildElement) { // Do something } 

如果正文中没有元素,则lastChildElement将退出此循环为null。

在某些情况下,您绝对不想使用开箱即用的$(“div:last-child”)。 需要注意的一件重要事情是,在调用之后,这将无法满足DOM的更改 – 例如,如果将新元素添加为最后一个子元素,则需要更新内容。 这不仅仅是重复之前的呼叫的情况; 你需要扭转前一个孩子的初始呼叫。

如果你做任何动态模糊的事情,要警惕这一点。 CSS伪类绝对是优秀的解决方案,它只是在IE中缺乏支持。 如果你的设计可以应付IE中最后一个孩子支持的丢失,并且你正在使用渐进式丰富,我强烈建议使用CSS方法而不是JS。

快进>> 4年后(2013年)
它现在可以使用CSS v3(​​CSS3)并且受到所有主流浏览器的支持(IE为> =版本9)。
如果你及时回到IE <=版本8 ,那么jQuery版本<1.x将把你排除在外(正如其他答案所指出的那样)。
阅读更多http://www.w3schools.com/cssref/sel_last-child.asp

 var divs = $("id").getElementsByTagName('div'); var lastChild = divs[divs.length-1];