У меня много div, некоторые из которых видны; Я хочу получить ID видимых:

Следующий код всегда возвращает первый div; это почему?

   alert($("div.my_div:visible").attr("id"));

Jsfiddle

0
user3399784 16 Мар 2014 в 08:26

2 ответа

Лучший ответ

Поскольку :visible не работает с видимостью CSS ("Элементы с видимостью: скрытые или непрозрачные: 0 считаются видимыми, поскольку они по-прежнему занимают место в макете ".), вы можете использовать:

$("div.my_div").each(function () {
    if ($(this).css('visibility') != 'hidden') console.log(this.id);
})

пример jsFiddle

1
j08691 16 Мар 2014 в 08:30

Вы используете свойство visibility:hidden css для своего элемента, поэтому селектор :visible не будет рассматривать это как display:none. Итак, что вам нужно сделать в этом контексте, вы должны отфильтровать коллекцию, проверив, имеют ли элементы в коллекции свойство visibility:hidden или нет, затем вы должны сгруппировать его идентификатор, используя .map() и сделайте эту группу массивом, используя .get() и .join() этот массив в соответствии с вашими потребностями с любыми разделителями ..

Пытаться,

alert($("div.my_div")
      .filter(function(){ 
            return $(this).css('visibility') === "hidden"; 
      })
      .map(function(){ 
            return this.id; 
      }).get().join(''));

ДЕМО

1
Rajaprabhu Aravindasamy 16 Мар 2014 в 08:35
1
Это возвращает все div (включая видимые и невидимые!)
 – 
user3399784
16 Мар 2014 в 08:28
Вы не объяснили, в чем проблема с кодом ОП.
 – 
Felix Kling
16 Мар 2014 в 08:29
@user: как это может быть, если селектор включает селектор :visible?
 – 
Felix Kling
16 Мар 2014 в 08:30
Разве :visible не проверяет только атрибут display css?
 – 
Brandon Taylor
16 Мар 2014 в 08:30