我有一个javascript字符串,我想将其作为表达式进行评估并与值进行比较。
var stringExpression=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}";
花括号内的值是dom中存在的元素id,上面的表达式是动态的,但我想要选择其值的元素将始终存在于花括号内。我计划使用jquery选择这些值。 $( “#的PropertyValue”)。VAL()。有人可以告诉我如何在javascript post中设置dom中的值以及如何替换值的任何想法,我是否需要使用split函数或者可以使用一些正则表达式来实现它。
您也可以向我指出javascript中可以帮助解决此问题的任何框架。
提前致谢。
答案 0 :(得分:0)
var str=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}";
var regExp = /{(.*?)}/
var values = []
var match = str.match(regExp)
while (match != null) {
var value = document.getElementById(match[1])
str = str.replace(match[0], value)
values.push(value)
match = str.match(regExp)
}
答案 1 :(得分:0)
这是功能范例中的一个解决方案,它读得非常好:
function value(tag)
{
var key = tag.substr(1, tag.length - 2) //remove braces
return document.getElementById(key)
}
function populate(template)
{
var tagRegExp = /{.+?}/g
var tags = template.match(tagRegExp)
var values = tags.map(value)
return template.split(tagRegExp).zip(values).join("")
}
var template=">.5*{PropertyValue} + .2*{DesignValue}+ 2000 +{price}";
console.log(populate(template))
此解决方案需要zip
方法来处理数组对象,可以按照以下方式实现(除非它已由库提供)。
Array.prototype.zip = function (other) {
function zipOne(acc, x, i, a)
{
if (i < other.length) {
if (i < a.length - 1) {
return acc.concat([x, other[i]])
} else {
return acc.concat([x]).concat(other.slice(i))
}
} else {
return acc.concat([x])
}
}
return this.reduce(zipOne, [])
}