2014-10-30 59 views
1

在我的網站上,如果頁面首次加載並且已被最大化/全屏顯示,div comBrand具有我要應用的特定CSS屬性。檢查div是否應用了特定樣式

在調整大小事件過程中,我使用.css()函數將不同屬性應用於該元素,以便該div不與其他屏幕項目重疊,但是,實際上不是改變CSS,而是將style屬性添加到該div在代碼中。有時根據您如何調整頁面大小,調整大小功能可能以如下方式結束:使用最大化按鈕時,最終會導致特定div的錯誤位置。我正在檢查一些事情以確保不會發生。

但是,我不知道這裏的語法是否正確在resize函數期間檢查div的樣式屬性,因爲它似乎沒有按預期工作。

$(window).resize(function() { 

//first check 
    if ($('#comBrand').css('top') == '155px') 
    { 
    //second check to see if the peculiuar event was reached where the div is positioned incorrectly but the window isn't maximized 
    if (($('#comBrand').attr('style') == 'top: 155px;margin-left: -615px;left: 50%;') && (window.screen.width > window.screen.availWidth)) 
    { 
    $('#comBrand').css({'top': '155px', 'margin-left': '-615px', 'left': '50%'}); 
    } 
    else //assume that the page is already maximized and adjust the div accordingly 
    { 
    $('#comBrand').css({'top': '141px', 'margin-left': '0', 'left': '0'}); 
    } 
    } 
    else //default else, if the CSS of the div is anything other than what was initially checked for, set it back to its default location 
    { 
    $('#comBrand').css({'top': '155px', 'margin-left': '-615px', 'left': '50%'}); 
    } 

}); 

我知道這是一個有點混亂,黑客攻擊有點和,但我還是想獲得它的功能。

我添加了兩個班,並給DIV comBrand類的最大化,在html硬編碼,然後在調整大小功能,使用此代碼,但是,它不能正常工作或做任何事......

$(window).resize(function() { 

    if ($('#comBrand').hasClass('maximized')) 
     { 
     $('#comBrand').removeClass('maximized'); 
     $('#comBrand').addClass('minimized'); 
     } 

    else { 
     $('#comBrand').removeClass('minimized'); 
     $('#comBrand').addClass('maximized'); 
    } 

}); 
+0

'在resize事件我使用.css()函數將不同的屬性應用於該元素,看到該部分會很有趣。你有沒有考慮過使用媒體查詢?爲什麼你檢查'if($('#comBrand').css('top')=='155px')'而不是特定的窗口寬度?你也使用這個邏輯:'if === 155' else else'$('#comBrand')。css({'top':'155px','對我來說沒有意義......很難理解你實際上需要 – 2014-10-30 19:04:05

回答

1

由於Apul古普塔指出,你應該添加和刪除類。因此,建立一個對夫婦類:

CSS:

.FirstClass 
{ 
top: 155px; 
margin-left -615px; 
left:50%; 
} 
.SecondClass 
{ 
top:141px; 
margin-left:0; 
left:0; 
} 

接下來,你的邏輯改成這樣:

if (!$('#comBrand').hasClass('FirstClass') && (window.screen.width > window.screen.availWidth)){ 
     $('#comBrand').removeClass("FirstClass"); 
     $("#comBrand").addClass("SecondClass"); 
     } 
    } 
    else { 
     $("#comBrand").removeClass("SecondClass"); 
     $("comBrand").addClass("FirstClass"); 
    } 

你的第一個嵌套的if語句沒有做任何事情......你正在檢查CSS是否爲X - 如果是,則將CSS設置爲X.因此,我刪除了該代碼。

我必須承認你的if/else邏輯未被優化(有點冗餘)和混淆,但是這應該讓你知道你需要做什麼。

+0

我已經有了這麼多,但代碼沒有做任何事情......請參閱已編輯問題。 – 2014-10-30 19:20:41

+0

我不確定rstand你在問什麼。 – 2014-10-30 19:22:35

+0

現在我正在使用類,has類的代碼,並刪除添加和添加類..沒有它的工作現在。沒有任何更改或被添加或刪除。 – 2014-10-30 19:23:32

4

您應該添加一個CSS class而不是單獨使用CSS屬性。之後,只需使用.hasClass查看是否添加了課程。

這裏更多閱讀:

http://api.jquery.com/hasclass/

http://api.jquery.com/addclass/

+0

我不是單獨添加樣式我搜索了一下如何更改div的CSS,那個div comBrand有它自己的屬性集......我不是單獨應用樣式當我只是jQuery修改它應用樣式的css,如前所述,而不是直接實際修改css屬性.. – 2014-10-30 18:56:16

+0

你絕對修改樣式,這就是你發佈的代碼是做什麼的,添加或刪除類是一個明顯不同的方法 - 幾乎總是優越的,尤其是如果你要重用CSS。 – 2014-10-30 19:16:19

+0

但是試試我的答案吧 – 2014-10-30 19:17:39

0

我會看看這一點,因爲我不確定你可以保證該字符串的格式。至少,您應該將個別字段與.css('')進行比較。

$('#comBrand').attr('style') == 'top: 155px;margin-left: -615px;left: 50%;' 

但正如其他人所建議的,我會主張使用CSS類而不是style屬性。

2

儘管Apul的回答絕對正確,但它並沒有回答問題。要做到這一點,你可以做到以下幾點:

var styles = $('#myDiv').attr('style').split(';'); 
var stylesKeyValue = {}; 
styles.forEach(function(value) { 
    stylesKeyValue[value.split(':')[0]] = value.split(':')[1]; 
}); 

這將有類似工作:

<div id="myDiv" style="background-color:pink;min-height:20px;"></div> 

,然後你可以測試與價值觀:

console.log(stylesKeyValue['background-color'] == 'pink'); 
+0

+1我想知道什麼時候有人會真正回答所問的問題。我當然嘗試過在早期查找它,但當人們詢問樣式時,每個人都會自動採用CSS而不是style屬性。我也認爲CSS功能被稱爲CSS但是將樣式屬性應用於ID是誤導性的。好吧。 – 2014-10-30 19:39:54

+0

@ChristopherBruce請注意,如果由於某些原因班級不工作,我只是在這裏添加答案。他們真的是這個問題的最佳解決方案......而不是確切的答案。 – charles 2014-10-30 19:45:40

+0

我明白了,這些課程確實讓這些課程變得更加簡單,我同意這是一個更好的解決方案,但是有時候,您可能會因爲一段時間的工作而只想解決手頭問題的答案而不是採取不同的方法而感到沮喪。心理,我猜:) – 2014-10-30 19:48:36

相關問題