Javascript 将一个函数的功能注入到另一个更大的函数中
破坏功能,功能人 我有一个大函数,它在DOM中搜索一个参数,并用另一个参数替换它: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
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()
。大概是这样的: