2013-11-01 257 views
1

所以我想設計一個jQuery結構,以便將來爲我的表單重構和添加更簡單的字段。我最初的想法是這樣的。創建一個Jquery對象的對象

var dom = { 
    "Popup": { 
     "Title": "Edit Ticket", 
     "Width": popupWidth, 
     "Container": $("#TicketPopup"), 
     "Buttons": { 
      "Save": $("#SaveTicketPopup"), 
      "Close": $("#CloseTicketPopup"), 
     }, 
     "Fields": { 
      "Id": $("#TicketPopupTableTicketID"), 
      "ContactEmail": $("#TicketPopupTableUserEmail"), 
      "ContactPhone": $("#TicketPopupTableUserPhone"), 
      "Name": $("#TicketPopupTableItemName"), 
      "CategoryString": $("#TicketPopupTableCategory"), 
      "DateSubmittedString": $("#TicketPopupTableDateSubmitted"), 
      "StatusString": $("#TicketPopupTableStatus"), 
      "DateResolvedString": $("#TicketPopupTableDateResolved"), 
      "DateArchivedString": $("#TicketPopupTableArchived"), 
      "Description": $("#TicketPopupTableDescription"), 
      "Initials": $("#TicketUpdateInitials"), 
     } 
    } 
}

我的問題主要是結構性迴避的事實,我可以準備好文件,儘管不一定是在這一點頁面上的對象之前初始化。這是否意味着我調用document.getElementById,而不是每次都存儲結果元素?我也想知道是否會更有效率地遍歷我的Fields子對象,而不是像$(「input」,「#popup」)那樣做。感謝您的任何意見。

回答

2

我可以在文檔準備好之前進行初始化,儘管對象不一定在頁面上。這是否意味着我調用document.getElementById,而不是每次都存儲結果元素?

不,這意味着您的對象將只是空的,您的代碼將被破壞。您不能使用jQuery來獲取DOM元素,直到該元素存在於DOM中。 jQuery選擇器將而不是被懶惰地評估。您需要延遲腳本的初始化(或至少訪問DOM的部分),直到之後存在

我也想知道,這將是更有效的。每次在我的字段子對象,而不是做這樣的事情$(「輸入」,「#popup」)

這將是極大更有效地遍歷Fields。你的腳本可能做的最慢的事情是訪問DOM;每次您可以使用現有的jQuery對象而不是再次查詢DOM時,您絕對應該這樣做。

+0

我想你已經誤解了第二個問題。我至少讀過這個問題,問題是迭代自定義對象的Fields屬性vs使用jquery選擇'#popup'元素中包含的所有'input'元素會更有效率。 –

+0

@JamesMontagne我認爲你是對的。我已經更新了我的答案。 – meagar

+0

嗯......如果你說的是真的,我的命名空間在文檔準備好之前不能評估。現在我想到了它,我的腳本正在呈現在PageEnd中,所以我使用的所有DOM元素都應該已經存在。因此,它似乎仍然爲我工作的原因。謝謝你幫助我認識到這一點 - 我知道一些東西沒有加起來。 – nicmoon