我创建了一个函数:
function CheckHidden(el){ return $(el).css('display')!='none' }
我的IDE警告我:
使用'new'
调用时,构造函数返回的原始值将会丢失
实际上当我这样称呼时:
var all = $("#catalog-body > div").filter(function(){return CheckHidden(this)})
它不起作用,也不会将元素集减少到未隐藏的元素集。 请向我解释这个问题。我缺乏知识。
答案 0 :(得分:67)
我自己遇到了这个警告,如果你想知道原因,那是因为你的IDE希望函数名以小写字母开头。由于您的函数名为CheckHidden,其大写字母为C,因此它认为这是一个类声明。
但是,您仍然应该使用jQuery的:visible选择器来修复您的特定问题。
答案 1 :(得分:11)
如果使用关键字new
创建对象(如警告中所述),JS将返回对象的新实例,而不是构造函数的返回值。
像
这样的功能function CheckHidden() {
return false;
}
将返回两个不同的值,具体取决于它的执行方式。
// "a" is boolean value
var a = CheckHidden();
// "a" is an object of type "CheckHidden"
var a = new CheckHidden();
答案 2 :(得分:0)
jQuery实际上内置了类似的内容。您可以使用:visible
选择器。你可以这样做:
var all=$("#catalog-body > div").filter(':visible')
获取可见元素。
答案 3 :(得分:0)
如果要拉出所有可见的元素,可以使用jQuery's :visible
selector:
var all = $("#catalog-body > div:visible")
相反,如果要拉出所有隐藏的元素,可以将其与jQuery's :not
selector结合使用:
$("#catalog-body > div:not(:visible)")