2013-05-27 31 views
1

我想爲應用程序構建一些自定義js,並且我需要從父項目中複製一些css樣式。jQuery獲取基於正則表達式的css屬性

... 
match_properties: ['background-color', 'border-radius', 'margin'], 
... 

var custom_css = []; 
$(params['match_properties']).each(function(i, v) { 
    custom_css.push(v+': '+$(params['object']).css(v)); 
}); 
custom_css = custom_css.join('; '); 

css_properties = css_properties + custom_css + ';'; 

反正從jQuery來得到所有從項目('moz-border-radius''webkit....')的'border-radius'屬性?

的一點是,不要做類似下面,用手

if(params['match_properties']['border-radius']) { 
    custom_css.push('-moz-border-radius: '+$(params['object'].css('-moz-border-radius'))) 
    custom_css.push('-webkit-border-radius: '+$(params['object'].css('-webkit-border-radius'))) 
} 

和理由不這樣做,因爲這將是更有效,只是通過'border-radius''box-shadow',或者是什麼以往,並得到所有相關

+1

這是'$。每個(元,FN);' – Ven

+0

@ user1737909我很抱歉,但什麼是你指的是,因爲我不明白這一點? – Alex

+0

'$(params ['match_properties'])' – Ven

回答

0

我落得這樣做:

var custom_css = []; 
$.each($(params['match_properties']), function(i, v) { 
    custom_css.push(selectr($(params['object']), v)); 
}); 
custom_css = custom_css.join('; '); 


function selectr(element, selector) { 
    var selectors = { 
     browser: ['border-radius', 'box-shadow'], 
     shorthand: ['margin', 'border'], 
    } 

    var my_css = []; 

    if($.inArray(selector, selectors.browser) > -1) 
    { 
     my_css.push('-webkit-'+selector+': '+$(element).css('-webkit-'+selector)); 
     my_css.push('-moz-'+selector+': '+$(element).css('-moz-'+selector)); 
     my_css.push(selector+': '+$(element).css(selector)); 
    } 
    else if($.inArray(selector, selectors.shorthand) > -1) 
    { 
     my_css.push(selector+': ' + 
      $(element).css(selector+'-top') + ' ' + 
      $(element).css(selector+'-right') + ' ' + 
      $(element).css(selector+'-bottom') + ' ' + 
      $(element).css(selector+'-left') 
     ); 
    } 
    else 
    { 
     my_css.push(selector+': '+$(element).css(selector)); 
    } 

    return my_css; 
} 
1

在jQuery的1.9屬性及更高版本:

var props = $('whatever').css(['background-color', 'width', 'font-size']); 

與propertie返回一個對象s對應於你要求的CSS屬性。

+0

包括''-moz -...'',''-webkit -...'',如果我傳遞像'box-shadow''這樣的東西? – Alex

+0

@ w0rldart不,我不認爲它會這樣做; jQuery並沒有試圖跟蹤這些事情。但是,如果你明確地要求他們,我懷疑它會起作用。 – Pointy

+0

@ w0rldart你總是可以編寫一個小的過濾器函數,它可以獲得一系列屬性名稱,併爲諸如「box-shadow」和「transition」之類的東西應用前綴擴展。 – Pointy