-1
     var checkLeft= $('#left .module:hidden');
     if(checkLeft) {
        if($('.resetLeft').length) {
          left.prepend('<span class="resetLeft">Reset Left Widgets</span>');
         }
     }

试图让它正常工作有点麻烦。因为我真的不想要:hidden伪类,因为我相信 IE 不支持这一点。基本上我做了一个函数,这段代码就在里面。当它运行时,它会检查父元素是否有类的#left任何子元素,我使用了过滤器功能,并且必须隐藏两个元素才能真正正确响应。对此有什么好的想法吗?display:none.module

这是一个启动的 JSBIN

http://jsbin.com/upuwix/1/edit

4

1 回答 1

2

jQuery 的(部分)要点是它可以跨浏览器工作。:hidden在所有浏览器中都用作 jQuery 选择器 - doco说它“是一个 jQuery 扩展,而不是 CSS 规范的一部分”。

但是,您的if测试不正确:

if(checkLeft) {

...总是正确的,因为您正在测试 jQuery 对象本身 - 对象总是真实的。您需要测试.length以查看是否有任何元素与您的选择器匹配:

if (checkLeft.length) {

在那之后的那一行,您已经在使用相同的技术:

   if($('.resetLeft').length) {

...除了在那条线上,你的逻辑是倒退的——如果长度为 0,即如果还没有.resetLeft元素,你希望它为真,所以要么!在条件的开头添加,要么测试.length === 0

   if(!$('.resetLeft').length) {

最后,left.prepend(...)没有工作,因为你没有left变量。要么定义它,要么使用$('#left').prepend(...).

更新演示:http: //jsbin.com/upuwix/3/edit

于 2013-06-15T04:18:16.647 回答