我不是javascript的大师,所以不要责怪我。 我的任务是在html页面中查找和替换文本,因此每个数字都应该替换为它的值乘以某个数量。 例如123 - > 104.55(123 * 0.85),245 - > 208,25(245 * 0.85)等 目前我的代码如下:
$('body').html(
$('body').html().replace(/([0-9\.]+)/g, eval("$1*0.85"))
);
eval(“$ 1 * 0.85”)在尝试parseFloat($ 1)时返回NaN * 0.85也没有返回正确的结果 有人可以提供建议吗? 感谢。
答案 0 :(得分:3)
您可能不希望获取整个页面的HTML并将其替换为更新的HTML,因为所有元素都会被拆除并重新创建,这会对事件处理程序等产生影响。
就在昨天我answered this other question here。答案可以很容易地适用于您的情况。
更新:由于您没有将结果移动到新元素中,因此代码实际上变得更简单:
walk(document.body);
function walk(node) {
var child;
switch (node.nodeType) {
case 1: // Element
for (child = node.firstChild;
child;
child = child.nextSibling) {
walk(child);
}
break;
case 3: // Text node
node.nodeValue = node.nodeValue.replace(
/[0-9]+(?:\.[0-9]+){0,1}/g,
function($0) {
msgs.push($0);
var num = parseFloat($0, 10);
if (isNaN(num)) {
return $0;
}
return num * 0.85;
}
);
break;
}
}
请注意,我已经对regexp进行了一些修改,你可能想按摩它直到你想要它为止。但我只想在数字后面跟小数点匹配。 (值得注意的是,并非所有文化都使用.
作为小数点,但您似乎在您的示例中,所以......)
答案 1 :(得分:2)
它应该是这样的,
var x = $('body')。html();
x = x.replace(/([0-9。] +)/ g,function(x){return x * 0.85;});
$( '主体')的HTML(X);
如果你不考虑事件等,