2012-01-12 157 views
1

最近我一直試圖深入研究高級(對我來說)編程概念,如抽象和函數式編程等。這使我嘗試了w/anon函數。jQuery.css()不適用於元素

我有一種情況,動態生成的值不會通過使用.css({})的匿名函數應用於目標元素。我認爲這與我研究中的虛假翻譯/對象文字有關。

Chrome和FF控制檯都沒有拋出任何錯誤,所以我在這裏問專家。

我做了一個小提琴,但它不能很好地工作。我只是要鏈接開發網站所涉及的資源。

這是我用來玩/實驗和嘗試新事物的開發網站。

http://dev/kenstowell.net

JS文件:http://dev.kenstowell.net/scripts/scripts.js

一切都可以通過調試器控制檯中找到的,當然。

好了,所以這裏是預期的行爲是什麼:

  1. (window).loadinitDOM()被調用。

    $(window).load(function(){ //Style Initial Dom Elements initDOM(); });

  2. 裏面的initDom(),我試圖通過調用setElemMargin()並用適當的PARAMS提供它設置在相對於父容器上邊距。

    setElemMarg("#main-content-one", "#intro-text", "#intro-text", "margin-top");

  3. setElemMarg()獲取供給args來高度,並用它們來計算.css()地圖要設置的餘量。

    var setElemMarg = function(elem1, elem2, elemTrgt, propName){
    var margH = (getH(elem1) - getH(elem2))/2;
    $(elemTrgt).css({propName : margH});
    console.log(elem1, elem2, elemTrgt, propName, margH); }

    var getH = function(elem){ return $(elem).height(); console.log($(elem).height()); }

  4. 應用計算保證金margin-top。 (來自上述方法)

    $(elemTrgt).css({propName : margH});

由於任何人誰看這個。請隨時給我一些建設性的批評。也許你希望自己在成爲新興開發者時擁有的一些東西。:)

回答

2

的問題存在於你的setElemMarg()功能:

var setElemMarg = function(elem1, elem2, elemTrgt, propName) { 
    var margH = (getH(elem1) - getH(elem2))/2; 

    $(elemTrgt).css({propName : margH}); // <-- Here. 

    console.log(elem1, elem2, elemTrgt, propName, margH); 
} 

您使用的是您的來電css()結果的文本對象語法jQuery的努力,而不是更新propName樣式屬性其名稱存儲在propName中的房產。

您可以使用括號符號來解決這個問題:

var styleProps = {}; 
styleProps[propName] = margH; 
$(elemTrgt).css(styleProps); 

或直接致電的css()兩個參數形式:

$(elemTrgt).css(propName, margH); 
+0

謝謝!我沒有通過閱讀文檔來建立連接,這兩個參數表單可能需要var名稱......感嘆。我一直試圖做一些奇怪的連接b/c我認爲他們需要字符串。 – Ken 2012-01-12 09:15:36

0

由於setElemMarg在window.load內initDOM稱爲事件,那麼jquery/dom不保證準備就緒。您需要在文檔加載事件中調用此函數

+0

不幸的是,文件加載對於計算寬度/高度是非常可怕的,就像在圖像創建之前所稱的那樣。 [閱讀](http://stackoverflow.com/questions/7865143/jquery-height-function-returning-inaccurate-value) – Ken 2012-01-12 09:07:18

+0

你是絕對正確的...我曾經打算使用'$(文檔)。 ready(function(){...});' – Skyrim 2012-01-12 09:12:42

2

爲什麼不嘗試使用$(element).attr('style','css_values');

+3

由於所有其他內聯樣式(如果有)將被覆蓋。 – Connum 2012-01-12 09:10:07

+0

男人!我完全忘記了,我一直在串聯包含.attr()中的逗號的值時遇到問題,您如何建議使用var編寫此值? – Ken 2012-01-12 09:12:36

+0

var margH =(getH(elem1)-getH(elem2))/ 2; // $(elemTrgt).attr('style','margin-top:'+ margH +';'); // < - 這裏。 *對不起,這個文本框中的代碼行有問題:p – 2012-01-12 09:16:43