littleguga
@littleguga
Не стыдно не знать, а стыдно не интересоваться.

Почему undefined и как получить дочерний элемент?

Вот весь код
Задача состоит в получении первого div элемента в нажатом столбце.
1. Почему при нажатии на первую колонку выводит column0, а не block3?
2. Почему при нажатии на последние 2 столбца выводит undefined?

Заранее благодарен за ответ!
  • Вопрос задан
  • 2336 просмотров
Решения вопроса 2
Ответ на первый ваш вопрос вы можете посмотреть вот тут first-child. Вы не к тому применяете селектор :first-child.
Надо так:
$("div#" + thisColID + " div:first-child").attr('id');


Можно сделать попроще. Рабочий вариант будет выглядеть примерно так:
var getBlockInColumn = function() {
	var thisColID = $(this).attr('id'), children = $("div#" + thisColID).children();
        if (children.length) {
            alert($(children[0]).attr('id'));
        }
};

$(document).ready(function(){
	$(".column").on("click",getBlockInColumn);
});
Ответ написан
@fr33zy
alert($("div#" + thisColID + ":first-child").attr('id'));


Замените на:
alert($("div#" + thisColID + " div:first-child").attr('id'));

Или просто добавьте пробел перед :first-child.

Почему?
Псевдокласс :first-child указывает на первый дочерний элемент указанного вида.
Вот что у вас получается: div#someid:first-child.
Что должно быть: div#someid :first-child

По видимому, в "неправильном" селекторе "div#someid:first-child" сначала ищется div:first-child, а потом уже результат фильтруется по id. Т.к. первый div - это column0, то div:first-child всегда выбирает его.
В первом случае все работает, поскольку первый элемент имеет id="column0". У остальных элементов id другие, поэтому они не проходят дополнительную фильтрацию.
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
uam
@uam
у меня ваще везде undefined браузер фаерфокс 36
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы