代码拉取完成,页面将自动刷新
///import core
///commands 查找替换
///commandsName SearchReplace
///commandsTitle 查询替换
///commandsDialog dialogs\searchreplace
/**
* @description 查找替换
* @author zhanyi
*/
UE.plugin.register("searchreplace", function() {
var me = this;
var _blockElm = { table: 1, tbody: 1, tr: 1, ol: 1, ul: 1 };
var lastRng = null;
function getText(node) {
var text = node.nodeType == 3
? node.nodeValue
: node[browser.ie ? "innerText" : "textContent"];
return text.replace(domUtils.fillChar, "");
}
function findTextInString(textContent, opt, currentIndex) {
var str = opt.searchStr;
var reg = new RegExp(str, "g" + (opt.casesensitive ? "" : "i")),
match;
if (opt.dir == -1) {
textContent = textContent.substr(0, currentIndex);
textContent = textContent.split("").reverse().join("");
str = str.split("").reverse().join("");
match = reg.exec(textContent);
if (match) {
return currentIndex - match.index - str.length;
}
} else {
textContent = textContent.substr(currentIndex);
match = reg.exec(textContent);
if (match) {
return match.index + currentIndex;
}
}
return -1;
}
function findTextBlockElm(node, currentIndex, opt) {
var textContent,
index,
methodName = opt.all || opt.dir == 1 ? "getNextDomNode" : "getPreDomNode";
if (domUtils.isBody(node)) {
node = node.firstChild;
}
var first = 1;
while (node) {
textContent = getText(node);
index = findTextInString(textContent, opt, currentIndex);
first = 0;
if (index != -1) {
return {
node: node,
index: index
};
}
node = domUtils[methodName](node);
while (node && _blockElm[node.nodeName.toLowerCase()]) {
node = domUtils[methodName](node, true);
}
if (node) {
currentIndex = opt.dir == -1 ? getText(node).length : 0;
}
}
}
function findNTextInBlockElm(node, index, str) {
var currentIndex = 0,
currentNode = node.firstChild,
currentNodeLength = 0,
result;
while (currentNode) {
if (currentNode.nodeType == 3) {
currentNodeLength = getText(currentNode).replace(
/(^[\t\r\n]+)|([\t\r\n]+$)/,
""
).length;
currentIndex += currentNodeLength;
if (currentIndex >= index) {
return {
node: currentNode,
index: currentNodeLength - (currentIndex - index)
};
}
} else if (!dtd.$empty[currentNode.tagName]) {
currentNodeLength = getText(currentNode).replace(
/(^[\t\r\n]+)|([\t\r\n]+$)/,
""
).length;
currentIndex += currentNodeLength;
if (currentIndex >= index) {
result = findNTextInBlockElm(
currentNode,
currentNodeLength - (currentIndex - index),
str
);
if (result) {
return result;
}
}
}
currentNode = domUtils.getNextDomNode(currentNode);
}
}
function searchReplace(me, opt) {
var rng = lastRng || me.selection.getRange(),
startBlockNode,
searchStr = opt.searchStr,
span = me.document.createElement("span");
span.innerHTML = "$$ueditor_searchreplace_key$$";
rng.shrinkBoundary(true);
//判断是不是第一次选中
if (!rng.collapsed) {
rng.select();
var rngText = me.selection.getText();
if (
new RegExp(
"^" + opt.searchStr + "$",
opt.casesensitive ? "" : "i"
).test(rngText)
) {
if (opt.replaceStr != undefined) {
replaceText(rng, opt.replaceStr);
rng.select();
return true;
} else {
rng.collapse(opt.dir == -1);
}
}
}
rng.insertNode(span);
rng.enlargeToBlockElm(true);
startBlockNode = rng.startContainer;
var currentIndex = getText(startBlockNode).indexOf(
"$$ueditor_searchreplace_key$$"
);
rng.setStartBefore(span);
domUtils.remove(span);
var result = findTextBlockElm(startBlockNode, currentIndex, opt);
if (result) {
var rngStart = findNTextInBlockElm(result.node, result.index, searchStr);
var rngEnd = findNTextInBlockElm(
result.node,
result.index + searchStr.length,
searchStr
);
rng
.setStart(rngStart.node, rngStart.index)
.setEnd(rngEnd.node, rngEnd.index);
if (opt.replaceStr !== undefined) {
replaceText(rng, opt.replaceStr);
}
rng.select();
return true;
} else {
rng.setCursor();
}
}
function replaceText(rng, str) {
str = me.document.createTextNode(str);
rng.deleteContents().insertNode(str);
}
return {
commands: {
searchreplace: {
execCommand: function(cmdName, opt) {
utils.extend(
opt,
{
all: false,
casesensitive: false,
dir: 1
},
true
);
var num = 0;
if (opt.all) {
lastRng = null;
var rng = me.selection.getRange(),
first = me.body.firstChild;
if (first && first.nodeType == 1) {
rng.setStart(first, 0);
rng.shrinkBoundary(true);
} else if (first.nodeType == 3) {
rng.setStartBefore(first);
}
rng.collapse(true).select(true);
if (opt.replaceStr !== undefined) {
me.fireEvent("saveScene");
}
while (searchReplace(this, opt)) {
num++;
lastRng = me.selection.getRange();
lastRng.collapse(opt.dir == -1);
}
if (num) {
me.fireEvent("saveScene");
}
} else {
if (opt.replaceStr !== undefined) {
me.fireEvent("saveScene");
}
if (searchReplace(this, opt)) {
num++;
lastRng = me.selection.getRange();
lastRng.collapse(opt.dir == -1);
}
if (num) {
me.fireEvent("saveScene");
}
}
return num;
},
notNeedUndo: 1
}
},
bindEvents: {
clearlastSearchResult: function() {
lastRng = null;
}
}
};
});
此处可能存在不合适展示的内容,页面不予展示。您可通过相关编辑功能自查并修改。
如您确认内容无涉及 不当用语 / 纯广告导流 / 暴力 / 低俗色情 / 侵权 / 盗版 / 虚假 / 无价值内容或违法国家有关法律法规的内容,可点击提交进行申诉,我们将尽快为您处理。