JavaScript:在外部脚本中搜索和替换字符串

时间:2012-12-10 05:58:58

标签: javascript replace

我在我的网站上运行这个很酷的产品小部件(展示空间),将所选产品放在那里。它使用以下脚本:

<script>
  (function(d, s, id) {
    if (d.getElementById(id)) return;
    var fjs = d.getElementsByTagName(s)[0],
        js  = d.createElement(s); js.id = id;
    js.src = "http://www.show-space.com/widgets/manager.js?api_key=0qslzweoj79lp7h03ki9";
    fjs.parentNode.insertBefore(js, fjs);
  }(document, "script", "showspace-manager-js"));
</script>

通过以下方式调用:[ss-widget id=my_widget]

我现在遇到的问题是小部件(不再受支持)对所有产品小部件使用USD(“$”),而我更喜欢在瑞典克朗(“kr”)中显示它们,这通常是放在号码后面。

我更愿意:
一个。将“$ 99”改为“99 kr”

湾将“$ 99”改为“SEK 99”
也会起作用

我几乎不知道任何JavaScript,但被告知这可以通过JavaScript解决。那么,我该怎么做才能解决这个问题?

小部件的外观示例:http://www.presenttips.se/fars-dag

1 个答案:

答案 0 :(得分:1)

我会亲自使用正则表达式。

使用jQuery:

$(document).ready(function(){
    var contents=$('#my_widget').html();
    var rgx=/\$\s?(\d*(?:\.\d{2})?)/g;
    $('#my_widget').html(contents.replace(rgx,"$1 kr"));
});

用香草:

var contents=document.getElementById("my_widget").innerHTML;
var rgx=/\$\s?(\d*(?:\.\d{2})?)/g;
document.getElementById("my_widget").innerHTML=contents.replace(rgx,"$1 kr"));

注意:

以下列形式查找价格:

港币$ 160

$ 20

$ 20.50

$ 20.50

它找不到的价格的一些例子:

港币$ 160

$ 20.999

$ 20.9

使用vanilla版本,您需要一个事件来触发javascript。这很可能是正文加载,因此您的脚本标记中会包含以下内容:

body.onload=function() {
var content=...
...
};

编辑:我看过你的页面并且可以看到(至少在那个特定情况下)你的小部件是由类名而不是id定义的。我对vanilla脚本做了以下更改,它在你链接的页面上工作正常 - 但是你应该知道在这个实现中它只能在它在每个页面上找到的小部件的第一次出现时起作用。我认为你不可能有一个以上的页面,所以它应该没什么大不了的。

适用于您的网页:

var contents=document.getElementsByClassName("ss-widget")[0].innerHTML;
var rgx=/\$\s?(\d*(?:\.\d{2})?)/g;
document.getElementsByClassName("ss-widget")[0].innerHTML=contents.replace(rgx,"$1 kr");

最终编辑: 如上所示显示在窗口小部件中捏造其他一些东西,这里是工作的,jQuerified版本,包括事件处理程序注册和脚本标记

<script> 
    jQuery(document).ready( //When the document is ready, run the following function...
        function(){
            jQuery('.ss-widget .product-price').each( //Pick everything with class product-price inside everything with class ss-widget and run the following function on each
                function() {
                    var contents=jQuery(this).html(); //Get the contents of this element
                    var rgx=/\$\s?(\d*(?:\.\d{2})?)/g; //Define a regex to search for a dollar sign, followed by an optional space, followed by an arbitary amount of digits, optionally followed by a decimal plus 2 digits. Group everything but the dollar sign and space.
                    jQuery(this).html(contents.replace(rgx,"$1 kr")); //Replace any text found by the regex with it's grouped result, a space, then the text kr.
                }
            );
        }
    );
</script>