2013-04-05 21 views
3

我有一个通过插件生成的div,当我想要在隐藏= true时隐藏。在阅读完SO上的帖子之后,我想也许我可以使用.attr来查找disabled = true,然后使用CSS display:none来添加类来隐藏它。我无法编辑插件或源代码,所以我希望我可以通过我们的CMS从前端执行此操作。我是一个jQuery初学者,所以也许这是不可能的?使用jQuery隐藏div if语句和addClass

I want to hide the disabled arrows in the carousel at the bottom of this page。在插件生成后,HTML看起来像这样:

 <div class="jcarousel-prev jcarousel-prev-horizontal jcarousel-prev-disabled jcarousel-prev-disabled-horizontal" style="display: block;" disabled="true"></div> 

并且我已将此代码添加到CMS,但它不起作用。我在控制台中看不到任何错误;这是正确的方法吗?我的语法有什么问题吗?

 if ($('div.jcarousel-prev.jcarousel-prev-horizontal.jcarousel-prev-disabled.jcarousel-prev-disabled-horizontal').attr('disabled', true)){ 
      $(this).addClass("arrow"); 
     } 

在此先感谢您的帮助。

回答

2

:disabled选择器将不能使用任何元素,但表单字段。在形式上使用它可能有点不标准;使用“true”的值更加不合标准,而应将其“禁用”(请参阅​​Correct value for disabled attribute)。因此,代替使用:disabled,写入的代码需要使用选择器[disabled="true"]

您的选择器可能不需要使用整个类的列表 - 列表中的最后一个类可能是您所需要的全部目标。

但是,我只是简单地使用CSS来做你想做的事情。样式表中不包含arrow类,而是用.jcarousel-prev-disabled-horizontal替换它。

如果你仍然想去“已禁用”的路线,虽然使用JavaScript,请使用下,这也将取代需要一个if语句:

$('.jcarousel-prev-disabled-horizontal[disabled="true"]').addClass('arrow'); 
+0

这工作时,我在本地尝试它,但是当我插入到CMS中,该类不适用于该div。 – surfbird0713 2013-04-05 15:36:23

+0

如果我在浏览器的控制台中输入JavaScript线,我的工作方式适用于我。但它看起来像你有其他的JavaScript错误,所以如果你将这行添加到你的文件并重新加载页面,它可能不会执行这个原因。 – 2013-04-05 15:37:31

+0

而且,当然,这需要进入$(document).ready()函数。 – 2013-04-05 15:39:39

0

您的if()声明实际上是为div元素设置属性,而不是检查其状态。

if ($('div.jcarousel-prev.jcarousel-prev-horizontal.jcarousel-prev-disabled.jcarousel-prev-disabled-horizontal').attr('disabled')) 
{ 
      $(this).addClass("arrow"); 
} 
+0

感谢指出了这一点。该div将具有禁用的属性,所以我必须在应用该类之前检查它是否为真或假。我只想申请课程,如果这是真的。 – surfbird0713 2013-04-05 15:32:33

0

你需要比较不分配值:

if ($('div.jcarousel-prev.jcarousel-prev-horizontal.jcarousel-prev-disabled.jcarousel-prev-disabled-horizontal').attr('disabled')) { 
    $(this).addClass("arrow"); 
} 
+0

属性总是字符串,所以在这种情况下,if条件将始终为真,除非它是空字符串。这可能会导致奇怪的结果。 – 2013-04-05 15:34:59

0

是你实际上只需设置disabled属性

你需要检查你应该作如下更新您的代码元素已被禁用

.is(':disabled')

0

尝试这个,

$(document).ready(function(){ 
    if ($('.div.jcarousel-prev .jcarousel-prev-horizontal .jcarousel-prev-disabled .jcarousel-prev-disabled-horizontal').is(':disabled')){ 
     $(this).addClass("arrow"); 
    } 
    }); 
+0

另外,添加一个类可能不起作用,因为有一个内联样式应用'display:block' – 2013-04-05 15:18:42

+0

@amitagrawal,这不起作用,但是谢谢 – surfbird0713 2013-04-05 15:28:55

+0

@roballen的建议,即使样式不起作用,我应该当我的脚本正在工作时仍然看到箭头被添加到类的列表中,我不该吗? – surfbird0713 2013-04-05 15:29:13