用Greasemonkey替换div类中的float

时间:2012-10-16 16:21:21

标签: javascript firefox greasemonkey

首先,我有一些使用JavaScript的经验,但主要是使用客户端脚本编写程序而不是Web envoirement中的JavaScript。

我要做的是获取并替换此类中的vlaue:

<div class="detailPrice" style="float:left;width:180px"> € 20,90* </div>

每个页面的值都会发生变化。所以我无法搜索这个特定的值。 当我得到值时,我想将它分配给变量,如

price = 20.9

对它做一些数学计算,然后用旧的值替换我的新值。

提前感谢您提供任何帮助。

2 个答案:

答案 0 :(得分:1)

所以我在javascript中写了这个小函数,为你做了这个。这是它的jsBin

function test(d){
    price=d.innerHTML;        //grabs the text that's inside your div
    price = parseInt(price.substring(2));    //skips the euro sign and converts to int
    newPrice=price+5;      // does some math with the price
    d.innerHTML='€ ' + newPrice;    // replaces the text within that div
}

我这样做,当你点击价格时,这个函数被调用。如果你看一下JSBin,它会更有意义。

这是您可以执行此操作的众多方法之一。另一种方法是使用名为prototype的javascript框架。该框架有一个名为update的函数,其工作方式如下:

<div id="fruits">carrot, eggplant and cucumber</div>
Passing a regular string:


$('fruits').update('kiwi, banana and apple');
// -> HTMLElement
$('fruits').innerHTML
// -> 'kiwi, banana and apple'

再次。还有其他方法可以做到这一点。你只需要寻找它们。希望这可以帮助。

答案 1 :(得分:1)

如果您非常确定格式,请使用querySelectorAll()获取div并使用正则表达式提取价格。
下面的正则表达式考虑了常见的欧洲和美国格式,但假设小数点右边有两位数。

See the code in action at jsFiddle.

var priceDivs   = document.querySelectorAll ("div.detailPrice");
for (var J = priceDivs.length - 1;  J >= 0;  --J) {
    var oldPriceParts   = priceDivs[J].textContent.match (/^(?:\s|\D)*([0-9\.,]*)(\d{2})\D*$/);
    if (oldPriceParts.length === 3) {
        var newPrice    = parseInt ('0' + oldPriceParts[1].replace (/[\.,]/g, ""), 10)
                        + parseInt (oldPriceParts[2], 10) / 100
                        ;
        // DO WHATEVER MANIP YOU WANT HERE.
        newPrice        = newPrice * 1.3;

        priceDivs[J].textContent = '€ ' + newPrice.toFixed (2).toLocaleString ();
    }
    else {
        console.log ("**Unexpected price format!** ", priceDivs[J]);
    }
}