2014-10-17 33 views
1
for (i = 0; i < events.length; i++) { 
    left_pos = (event_col[i] * xfactor * 100); 
     //jquery part need cleaner 
    $('.contain_textDiv') 
     .append('<div class="sample_box1" style="margin-left:' + left_pos + '%;' + 'margin-top:' + Math.round(events[i].start) + 'px; width:' + Math.floor(95 * xfactor) + '%;' + 'position: absolute; height:' + Math.round(events[i].end - events[i].start) + 'px;"><div class="sample_boxHeader">Sample Layout</div><div class="sample_box_grayText">Sample Location</div></div>'); 
    } 

的JavaScript代碼,這部分將通過循環來改變目前的HTML樣式並添加需要一個更好的解決方案,以追加從JavaScript文件

<div class="sample"></div> 

<div class="sample2"></div> 

裏面的html我的HTML文件,已經存在一個<div class="sample"></div>

任何人都有更好的解決方案來清理代碼的一部分?我將衷心感謝您的幫助!

+0

你想在這裏做什麼... – 2014-10-17 02:31:12

+0

jquery部分很長很混亂,我想找到一個更好的解決方案將這兩個div附加到我的存在div – JavaLeave 2014-10-17 02:33:31

+0

爲什麼你認爲這是一個好主意編輯你想要的幫助?這將你的問題轉換爲:「這是一些HTML,我該如何改進我沒有向你展示的JavaScript。」 – 2014-10-17 04:43:12

回答

1

而是附加的DOM元素作爲一個字符串,創建jQuery的一個新的元素和追加一條:

var newEl = $('<div>').addClass("sample_box1").css({ 
    'margin-left': left_pos+"%", 
    'margin-top': Math.round(events[i].start), 
    width: Math.floor(95 * xfactor)+'%', 
    //etc etc 
}); 
$('.contain_textDiv').append(newEl); 
+0

這是一個偉大的方法!我想這樣,然後我試圖使用.html()方法...然後卡在那裏 – JavaLeave 2014-10-17 02:43:20

+0

在這裏的CSS部分是有點棘手。似乎我必須在margin-left和margin-top附近添加單引號,例如「margin-top」和「margin-left」,並且控制檯表示絕對沒有定義... – JavaLeave 2014-10-17 03:19:01

+0

是的,任何帶短劃線的東西都需要引號。確保你把引號放在絕對位置,否則它正在尋找一個變量,而不是字符串 – Brennan 2014-10-17 03:28:02

0

我認爲布倫南的回答是一種很好的清潔方法。但是,如果由於某種原因,你喜歡建立它作爲一個字符串,那麼這裏有一個小的例子「使用像一個StringBuilder陣列」砍我喜歡用不時:

for (i = 0; i < events.length; i++) { 
    left_pos = (event_col[i] * xfactor * 100); 
    var sb = []; 
    sb.push('<div class="sample_box1" '); 
    sb.push( 'style="margin-left:' + left_pos + '%;'); 
    sb.push( 'margin-top:' + Math.round(events[i].start) + 'px; '); 
    sb.push( 'width:' + Math.floor(95 * xfactor) + '%;'); 
    sb.push( 'position: absolute; '); 
    sb.push( 'height:' + Math.round(events[i].end - events[i].start) + 'px;">'); 
    sb.push('<div class="sample_boxHeader">Sample Layout</div>'); 
    sb.push('<div class="sample_box_grayText">Sample Location</div>'); 
    sb.push('</div>'); 
    console.log(sb.join('')); 
    $('.contain_textDiv').append(sb.join('')); 
} 
+0

這會使渲染比Brennan的解決方案慢嗎? – JavaLeave 2014-10-17 02:41:43

+1

我不認爲這會造成明顯的差異,除非事件數組非常大。此外,不成熟的優化和所有... – 2014-10-17 02:43:26

+0

@JavaLeave它實際上更快......但我不會推薦它。你不應該將任意數據直接連接到HTML。雖然您可能知道今天這些數值的來源,但您可能不知道它們明天來自哪裏。特洛伊的解決方案不會漏掉任何東西,這可能會導致模糊的CSS,HTML甚至是注入漏洞,這取決於它的使用方式。 – Brad 2014-10-17 02:44:00

1

有幾種方法清理這個。一種方法是縮進你的代碼。你可以做的另一件事是使用jQuery的方法來設置樣式屬性值(所以你不必擔心逃逸和不能)。

$('.contain_textDiv') 
    .append(
    $('<div>') 
     .addClass('sample_box1') 
     .css({ 
     'margin-left': left_post + '%', 
     'margin-top': Math.round(events[i].start) + 'px', 
     width: Math.floor(95 * xfactor) + '%', 
     height: Math.round(events[i].end - events[i].start) + 'px' 
     }) 
     .append([ 
     $('<div class="sample_boxHeader">Sample Layout</div>'), 
     $('<div class="sample_box_grayText">Sample Location</div>') 
     ]) 
) 

(代碼是未經測試,但應該讓你開始。)

另一個要考慮的(通常是最好的選擇)是使用JavaScript模板引擎。有很多可供選擇的。我發現Swig是非常高效和輕量級的,當您只有基本的模板需求時,這很好。

+0

css部分追加罰款,但它似乎像後面的兩個div不能像這樣追加。瀏覽器不斷拋出我的錯誤 – JavaLeave 2014-10-17 03:11:10

+0

@JavaLeave你肯定可以附加divs這種方式。我的代碼中有一個語法錯誤。現在已經修復了。我們在最後附加了一組元素,我用分號';'而不是逗號','。 – Brad 2014-10-17 13:53:42

相關問題