Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/javascript/384.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Javascript 将一个函数的功能注入到另一个更大的函数中_Javascript_Dom - Fatal编程技术网

Javascript 将一个函数的功能注入到另一个更大的函数中

Javascript 将一个函数的功能注入到另一个更大的函数中,javascript,dom,Javascript,Dom,破坏功能,功能人 我有一个大函数,它在DOM中搜索一个参数,并用另一个参数替换它: function findAndReplace(searchText, replacement, searchNode) { if (!searchText || typeof replacement === 'undefined') { // Throw error here if you want... return; } var regex = typ

破坏功能,功能人

我有一个大函数,它在DOM中搜索一个参数,并用另一个参数替换它:

function findAndReplace(searchText, replacement, searchNode) {
    if (!searchText || typeof replacement === 'undefined') {
        // Throw error here if you want...
        return;
    }
    var regex = typeof searchText === 'string' ?
        new RegExp(searchText, 'g') : searchText,
        childNodes = (searchNode || document.body).childNodes,
        cnLength = childNodes.length,
        excludes = 'html,head,style,title,link,meta,script,object,iframe';
    while (cnLength--) {
        var currentNode = childNodes[cnLength];
        if (currentNode.nodeType === 1 &&
            (excludes + ',').indexOf(currentNode.nodeName.toLowerCase() + ',') === -1) {
            arguments.callee(searchText, replacement, currentNode);
        }
        if (currentNode.nodeType !== 3 || !regex.test(currentNode.data)) {
            continue;
        }
        var parent = currentNode.parentNode,
            frag = (function () {
                var html = currentNode.data.replace(regex, replacement),
                    wrap = document.createElement('div'),
                    frag = document.createDocumentFragment();
                wrap.innerHTML = html;
                while (wrap.firstChild) {
                    frag.appendChild(wrap.firstChild);
                }
                return frag;
            })();
        parent.insertBefore(frag, currentNode);
        parent.removeChild(currentNode);
    }
}
然后我有另一个小函数,它接受一个美元金额并创建另一个数字:

function = oppCostCalc(dollarAmount) {
    var wage = 7.25;
    var costNum = Number(dollarAmount.replace(/[^0-9\.]+/g,""));
    var oppCost = Math.round(costNum/wage);
    return  oppCost;
}
我想做的是创建一个大函数,搜索页面中的dollarAmount,然后用oppCost替换所有出现的内容

我能不能把oppCostCalc塞进Find然后换掉?主要问题之一是find和replace同时具有输入和输出参数,我需要它只具有输入并使用它来查找输出。我读过一些关于在另一个函数中包装这两个函数的内容,但这似乎是一个倒退

我不一定在寻找一个“这是你的剧本”的答案,只是朝着正确的方向稳步推进。一旦我弄明白了,我会回来编辑这篇文章


谢谢您抽出时间。

哼哼,像这样的调用
findandplace(someDollarAmount、oppCostCalc(someDollarAmount)、searchNode)
应该可以。不要将这两个函数混搭在一起,这将是一个倒退,创建一个新函数最好是进行“混搭”。@ShanShan nope。好主意,但是不行。我忘记提到的另一个细节是,我需要输入参数是正则表达式。哪个参数?它不会改变任何东西,不管正则表达式与否,它仍然是一个参数。如果您需要它是一个特定的对象,您可以在调用
findandplace()
之前构建它,第三个新函数应该完成所有需要的事情。@ShanShan那么您是说,我应该拆分findandplace(),而不是合并这两个函数?用正则表达式查找输入。然后使用oppCostCalc()来修改它。然后,它被传递到另一个函数中。调用线看起来很荒谬,但我会尝试一下。不,你不需要拆分任何东西。当前的
findandplace()
工作正常,对吗?如果是,只需创建一个新函数来构建
replacement
参数,返回
oppCostCalc()
,然后调用
findandplace()
。大概是这样的: