2017-05-20 25 views
1

所以我試圖找出最好的方法來讓這個工作。我有一個很長的JSON數據庫代碼清單,我試圖精簡它。我創建了以下功能:.append或.after定義爲變量?

var insertData = function(formattedData, originalData, referencePoint, insertPoint, insertStyle) { 
    var formattedData = originalData.replace("%data%", referencePoint); 
    $(insertPoint).insertStyle(formattedData); 
} 

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"> 
</script> 

是否有可能定義類似我怎麼會在這裏有一個句點函數 - 作爲函數的變量之一引用?目前的代碼表示insertStyle不是一個函數 - 我如何才能讓代碼識別insertStyle應該採用變量名?如果我的第五個變量被insertData調用,那麼它應該被讀作.append

作爲參考,這裏是我如何調用該函數:

insertData("formattedHeaderName", "HTMLheaderName", bio.name, "#header", "prepend"); 

感謝提前任何幫助或想法!

+2

'var formattedData = formattedData;'所有這樣的行是不必要的;傳入參數已經將這些變量定義爲函數。 –

+0

Ah woops,感謝您的高舉,現在正在編輯。 – IkeDoud

回答

1

你正在尋找一個計算的屬性:

$(insertPoint)[insertStyle](formattedData); 

基本上,每個屬性訪問可以表示爲一個計算性能:

foo["bar"]; // same as foo.bar 

在你的原代碼,您使用的是非計算屬性,所以解釋器尋找一個字面上稱爲「insertStyle」的方法,它不存在。

+0

接下來,我得到錯誤$(...)[insertStyle]不是一個函數...有什麼我可能會失蹤?已經嘗試了以下值:prepend「prepend」「.prepend」.prepend並且它們都拋出相同的錯誤。 – IkeDoud

+0

你應該使用實際的方法名稱作爲字符串「prepend」。請仔細檢查您的帖子中的代碼是否與您在項目中嘗試執行的操作相匹配 - 從我可以看到的兩個代碼段中,我在這裏所說的內容應該可行。 –

+0

當我重寫時發現了一個錯字,現在又似乎正在預先設置,謝謝! – IkeDoud

0

當你傳遞一個參數傳遞給函數,像你這樣的:

insertData("formattedHeaderName", "HTMLheaderName", bio.name, "#header", "prepend"); 

這些參數都是字符串。不是jQuery方法。

因此,一個解決方案將是定義您需要使用的所有方法...
而只是比較傳遞的字符串來決定。

var insertData = function(formattedData, originalData, referencePoint, insertPoint, insertStyle) { 

    var formattedData = originalData.replace("%data%", referencePoint); 

    if(insertStyle=="prepend"){ 
    $(insertPoint).prepend(formattedData); 
    } 
    if(insertStyle=="append"){ 
    $(insertPoint).append(formattedData); 
    } 
    if(insertStyle=="after"){ 
    $(insertPoint).after(formattedData); 
    } 
    // And so on... 
} 

也許有一些其他的方式來實現這一目標?
但是,這是一個快速且易於實現。