2017-05-20 24 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... 
} 

也许有一些其他的方式来实现这一目标?
但是,这是一个快速且易于实现。