用解析的查询字符串对象替换HTML文本

时间:2013-06-27 14:16:05

标签: javascript replace

我正在解析以下查询字符串:

/ alt_name =试验&安培;测试=品牌&安培;旧=超人&安培;新=蝙蝠侠

并获取此Object {alt_name:“Giggitty”,test:“brand”,old:“Supco”,new:“Batman”}。

如果test = brand使用单词Batman(new)替换单词Superman(old)的内部html实例,我将如何创建脚本?

任何帮助都非常适合。

编辑。 HTML会有所帮助,尽管一个超级简单的例子就足够了。

<html>
    <body>
        <div>
            <p>Superman and some other text</p>
        </div>
    </body>
</html>

基本上我只想要将Superman这个单词的每个实例,或者旧的解析值替换为new的解析值,在这种情况下是蝙蝠侠。

1 个答案:

答案 0 :(得分:0)

如果你想要完全匹配“超人”而不是包含它的东西,你可以这样做。

HTML

<div>
    <p>Superman and some other text</p>
</div>
<div>
    <p>More Superman and some other text</p>
</div>
<div>
    <p>Something Supermanish and some other text</p>
</div>

的Javascript

function walkTheDOM(node, func) {
    func(node);
    node = node.firstChild;
    while (node) {
        walkTheDOM(node, func);
        node = node.nextSibling;
    }
}

function escapeRegex(string) {
    return string.replace(/[\[\](){}?*+\^$\\.|]/g, "\\$&");
}

function replaceText(node, searchText, replaceText) {
    var textNodes = [],
        length,
        i;

    function filterTextNodes(currentNode) {
        if (currentNode.nodeType === 3) {
            textNodes.push(currentNode);
        }
    }

    walkTheDOM(node, filterTextNodes);

    i = 0;
    length = textNodes.length;
    while (searchText && i < length) {
        textNodes[i].nodeValue = textNodes[i].nodeValue.replace(new RegExp("\\b" + escapeRegex(searchText) + "\\b"), replaceText);
        i += 1;
    }
}

var query = {
    alt_name: "Giggitty",
    test: "brand",
    old: "Superman",
    new: "Batman"
};

if (query.test === "brand") {
    replaceText(document, query.old, query.new);
}

jsfiddle