0

如何替换同一索引处的文本。此文本可能具有相同的模式。假设我想在下一个文本中替换粗体“是”。

“山姆个男孩,多莉是他的妹妹,但约翰他的父亲。他不是医生。”

当我使用以下代码时,它会替换第一个模式,即斜体“is”!

function getSelectedHTMLText() {
    if (window.getSelection) {  // all browsers, except IE before version 9 contents
    var range = window.getSelection ();
    var container = document.createElement("div");
    for (var i = 0, len = range.rangeCount; i < len; ++i) {
        container.appendChild(range.getRangeAt(i).cloneContents());
    }
            html = container.innerHTML;
            return html;
    } 
    else {
        if (document.selection.createRange) { // Internet Explorer
            var range = document.selection.createRange();
            html = range.htmlText;
            return html;
        }
    }
}

var txt = "Sam is a boy and Dory is his sister, but John <b>is</b> his father. He isn't a doctor.";

var htmlText = getSelectedHTMLText(); //This return s

var txtModified = txt.replace(htmlText, "is");

注意:我使用此代码将 HTML 代码替换为非 HTML 代码,反之亦然

4

1 回答 1

1

Tim Down在这里回答了您的问题。实际上看起来与您的代码非常相似。

我做了一个小提琴来演示http://jsfiddle.net/DggQL/它也适用于您的情况。

这是代码

/* taken from https://stackoverflow.com/a/3997896*/
function replaceSelectedText(replacementText) {
    var sel, range;
    if (window.getSelection) {
        sel = window.getSelection();
        if (sel.rangeCount) {
            range = sel.getRangeAt(0);
            range.deleteContents();
            range.insertNode(document.createTextNode(replacementText));
        }
    } else if (document.selection && document.selection.createRange) {
        range = document.selection.createRange();
        range.text = replacementText;
   }
}
于 2013-02-02T21:44:32.670 回答