2013-04-05 20 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