Ответ 1
jQuery действительно имеет что-то вроде этого встроенного. Вы можете использовать селектор :visible
. Вы можете просто:
var all=$("#catalog-body > div").filter(':visible')
чтобы получить видимые элементы.
Я создал функцию:
function CheckHidden(el){ return $(el).css('display')!='none' }
Моя IDE предупреждает меня, что:
Примитивное значение, возвращаемое конструктором, будет потеряно при вызове с помощью 'new'
Собственно, когда я называю это следующим образом:
var all = $("#catalog-body > div").filter(function(){return CheckHidden(this)})
он не работает и не уменьшает набор элементов до незакрытых. Пожалуйста, объясните мне вопрос. У меня огромная нехватка знаний.
jQuery действительно имеет что-то вроде этого встроенного. Вы можете использовать селектор :visible
. Вы можете просто:
var all=$("#catalog-body > div").filter(':visible')
чтобы получить видимые элементы.
Я столкнулся с этим предупреждением сам, и если вы хотите узнать причину, это потому, что ваши IDE ожидают, что имена функций начинаются с строчной буквы. Поскольку ваша функция называется CheckHidden с капиталом C, она считает это объявлением класса.
Однако вы все равно должны использовать jQuery: видимый селектор, чтобы исправить вашу конкретную проблему.
Если вы создаете объект, используя ключевое слово new
(как указано в предупреждении), JS возвращает новый экземпляр объекта, а не возвращаемое значение из конструктора.
Функция типа
function CheckHidden() {
return false;
}
будет возвращать два разных значения в зависимости от того, как он выполняется.
// "a" is boolean value
var a = CheckHidden();
// "a" is an object of type "CheckHidden"
var a = new CheckHidden();
Если вы хотите вытащить все видимые элементы, вы можете использовать jQuery :visible
селектор:
var all = $("#catalog-body > div:visible")
И наоборот, если вы хотите вытащить все скрытые элементы, вы можете комбинировать это с jQuery :not
селектор:
$("#catalog-body > div:not(:visible)")