Подтвердить что ты не робот

Получение последнего дочернего элемента div в IE8?

Есть ли другой способ получить последний дочерний элемент div, отличный от использования div:last-child, который, по крайней мере, не работает в IE8?

4b9b3361

Ответ 1

В jQuery легко:

$("div :last-child")

В чистом CSS это невозможно.

В противном случае вы застреваете в DOM в Javascript.

Также обратите внимание на разницу:

  • "div :last-child": каждый последний дочерний элемент div; и
  • "div:last-child": каждый div, в котором есть последний ребенок.

Ответ 2

К сожалению, я не знаю, как это сделать в CSS без использования: last-child, который (как вы сказали) терпит неудачу в IE.

Если вы говорите о javascript, тогда можно использовать Node.lastChild:

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

Ответ 3

Используйте jQuery для поиска соответствующих элементов: $("div:last-child").addClass("last-child");

Затем используйте CSS для указания презентации: div .last-child { /* your rules */ }

Ответ 4

Вы можете назначить класс "последним" программно и выбрать его или использовать javascript. Вы также можете сделать снимок, используя некоторые из Microsoft IE только css script thingies. Но я не знаю много о них, также не рассматриваю это как вариант.

Ответ 5

Я делаю это с помощью чистого JavaScript, перейдя через узлы из lastChild целевого элемента. Если в вашем HTML есть пробел, lastChild может быть текстом node, поэтому мы зацикливаемся до тех пор, пока не найдем элемент node (node type 1) или пока не закончим узлы (предыдущий элемент вернет null).

Например, чтобы найти последний элемент на странице, я возвращаюсь обратно из lastChild тела:

var targetElement = document.getElementsByTagName("body")[0],
    lastChildElement = targetElement.lastChild;

while (lastChildElement && lastChildElement.nodeType !== 1) {
    lastChildElement = lastChildElement.previousSibling;
}

if (lastChildElement) {
    // Do something
}

Если в теле нет элемента, lastChildElement выйдет из этого цикла как null.

Ответ 6

Есть некоторые случаи, когда вы определенно не хотите использовать $( "div: last-child" ) из коробки. Важно отметить, что это не повлияет на изменения в DOM после этого вызова - например, если новый элемент добавлен в качестве последнего дочернего элемента, вам необходимо обновить его. Это не просто случай повторения предыдущего вызова; вам нужно будет отменить начальный вызов предыдущего предыдущего дочернего элемента.

Если вы делаете что-то неопределенно динамичное, будьте осторожны. псевдо-класс CSS, безусловно, является превосходным решением, у него просто ужасная нехватка поддержки в IE. Если ваш дизайн может справиться с потерей поддержки последнего ребенка в IE, и вы используете прогрессивное обогащение, я бы настоятельно рекомендовал подход CSS к JS.

Ответ 7

Быстрая перемотка вперед → 4 года спустя (2013)
Теперь это возможно с помощью CSS v3 (CSS3) и поддерживается всеми основными браузерами (с IE >= версия 9).
Если вы вернетесь во времени с IE <= версия 8, тогда версия jQuery < 1.x будет сортировать вас (как указывали другие ответы).
Подробнее http://www.w3schools.com/cssref/sel_last-child.asp

Ответ 8

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