0

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

/?alt_name=test&test=brand&old=超人&new=蝙蝠侠

并得到这个对象 {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 这个词的每个实例,或者任何旧的解析值替换为新的解析值,在这种情况下是蝙蝠侠。

4

1 回答 1

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 上

于 2013-06-27T14:48:42.797 回答