包装文本“Rs”的每次出现。使用<span class =“someClass”> </span>

时间:2011-09-19 09:25:59

标签: javascript jquery html web

我的货币是“卢比”。发生在我网站上的多个地方。我希望用<span class="WebRupee">.包装文本的每一个匹配项但如果它已经用<span class="WebRupee">包装,则应该忽略它。

我无法使用$('*:contains("Rs.")').wrap("<span class=\"WebRupee\");,因为这会将html包装在包含Rs的节点周围。但不是单靠文本。出于同样的原因,我无法使用.wrapInner();

再次感谢任何帮助!

编辑: webrupee网站上提供的javascript在我的网站上不起作用(不知道为什么)。所以这不是一个解决方案。因此我想写一个自定义的JavaScript。只是不知道我怎么能接近这个。

编辑(2):大声思考 - 嗯有没有办法在indexOf(“Rs。”)添加html ..或者一种类似的方法

3 个答案:

答案 0 :(得分:1)

使用http://cdn.webrupee.com/js文件。它工作正常。我用过一个网站。 如果你想下载和自定义一点.. 感谢..

答案 1 :(得分:1)

首先,你要做的是一个肮脏的黑客。

您应该在源代码中修复它,无论它是什么(例如PHP后端,Ruby后端,纯HTML等)。

请参阅http://jsfiddle.net/8jXLw/

工作的示例

我做了很多假设和简化,你的正则表达式应该更完整。

var spanit = function(item) {
    var $item = jQuery(item);
    var regexp = /\d+ Rs\./;
    var text = $item.text();
    if (!regexp.test(text)) {
        return;
    }
    if ($item.has(".WebRupee").length) {
        return;
    }
    var new_text = text.replace(" Rs."," <span class='WebRupee'>Rs.</span>");
    $item.html(new_text);
};

jQuery(function() {
    $("p.test").each(function() {
        spanit(this);
    });
});

答案 2 :(得分:0)

非常低效的解决方案

    var replaced = $("body").html().replace('Rs.','<span class="WebRupee">Rs.</span>');
    $('body').html(replaced);
    var replaced = $("body").html().replace('<span class="WebRupee"><span class="WebRupee">Rs.</span></span>','<span class="WebRupee">Rs.</span>');
    $('body').html(replaced);