上下文
我有一个网站,用户可以在其中创建文章,其他用户可以进入并突出显示这些文章,以便他们对突出显示进行评论。用户选择文章文本后,我想获取所选文本的HTML内容。这样做之后,我想对照文章的HTML检查文本,以查看文章是否匹配。这样做是因为我使用.cloneContents()
来获取所选文本的HTML,该文本会自动关闭所有节点以使字符串有意义。我首先要获得选择:
if (window.getSelection) {
sel = window.getSelection();
}
然后我通过函数getSelectionHTML
运行此函数,该函数返回所选文本的HTML:
function getSelectionHTML() {
var html = "";
if (typeof window.getSelection != "undefined") { //for non-IE browsers
var sel = window.getSelection(); //get selection
if (sel.rangeCount) { //if selection was made?
var container = document.createElement("div"); //create element to add content to
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
container.appendChild(sel.getRangeAt(i).cloneContents()); //get stuff and clone contents (???)
}
html = container.innerHTML;
}
} else if (typeof document.selection != "undefined") { //for IE < 9
if (document.selection.type == "Text") {
html = document.selection.createRange().htmlText;
}
}
return html;
}
这两个功能都可以正常工作。将getSelectionHTML
的结果分配给变量selectedHTML
之后,我通过调用var exists = checkIfTextExists(selectedHTML)
function checkIfTextExists(highlight) {
let $text = $("#articleContents");
let textCurrent = $text.html().trim();
let textToHighlight = highlight;
let ifTextExists = textCurrent.indexOf(textToHighlight) > -1;
if (ifTextExists) { //if text exists
return true;
} else {
return false;
}
}
如果文章中存在文本,则在文章中突出显示匹配的文本。如果没有,则通过函数cutContent()
运行它,该函数从HTML字符串中切掉结束标记:
function cutContent(selectedHTML) {
var str = selectedHTML;
var tag = str.lastIndexOf("</");
var splitContent = str.substring(0, tag);
var check = checkIfTextExists(splitContent);
if (check === true) {
return splitContent;
} else {
cutContent(splitContent);
}
}
如果剪切的文本通过checkIfTextExists()
函数并返回true,则插入突出显示。但是,如果返回false,我将再次调用cutContent()
,这将再次运行该函数。问题是,当我设置变量var highlightHTML = cutContent(selectedHTML)
和console.log(highlightHTML)
时,它返回undefined
而不是切割值。仅当从功能checkIfTextExists()
至少调用一次功能cutContent()
时,似乎才发生这种情况。
问题
为什么我的函数返回undefined
而不是剪切内容?我的语法有什么用,它使我无法在变量(var exists = checkIfTextExists(selectedHTML)
)中调用一个函数,然后从该函数调用另一个函数,然后返回第一个函数,并返回一次出现的新值。功能运行?让我知道是否有任何问题。谢谢。