删除所选文本javascript之前和之后的特定文本

时间:2016-04-29 06:01:43

标签: javascript selectedtext

我想删除所选文本之前和之后的某些特定文本。例如,如果文本是:

<p>This is a &lt;random>sentence&lt;/random> that i am writing<p>

如果用户选择文字,则应删除&lt; random&gt;和&lt; / random&gt;从文字和文字都是这样的。

This is a sentence that i am writing.

如果用户选择&#39;句子&#39;以外的任何内容,则不会发生任何事情。 我知道如何选择特定文本,但我不知道如何在特定文本之前和之后删除文本的下一步。是否可能?

1 个答案:

答案 0 :(得分:1)

function replaceSelection() {
    var sel, range, fragment;

    if (typeof window.getSelection != "undefined") {
        // IE 9 and other non-IE browsers
        sel = window.getSelection();

        // Test that the Selection object contains at least one Range
        if (sel.getRangeAt && sel.rangeCount) {
            // Get the first Range (only Firefox supports more than one)
            range = window.getSelection().getRangeAt(0);
            var selectedText = range.toString();
            var replacementText = selectedText.replace(/&lt;\/?random>/, '');
            range.deleteContents();

            // Create a DocumentFragment to insert and populate it with HTML
            // Need to test for the existence of range.createContextualFragment
            // because it's non-standard and IE 9 does not support it
            if (range.createContextualFragment) {
                fragment = range.createContextualFragment(replacementText);
            } else {
                // In IE 9 we need to use innerHTML of a temporary element
                var div = document.createElement("div"), child;
                div.innerHTML = replacementText;
                fragment = document.createDocumentFragment();
                while ( (child = div.firstChild) ) {
                    fragment.appendChild(child);
                }
            }
            var firstInsertedNode = fragment.firstChild;
            var lastInsertedNode = fragment.lastChild;
            range.insertNode(fragment);
            if (selectInserted) {
                if (firstInsertedNode) {
                    range.setStartBefore(firstInsertedNode);
                    range.setEndAfter(lastInsertedNode);
                }
                sel.removeAllRanges();
                sel.addRange(range);
            }
        }
    } else if (document.selection && document.selection.type != "Control") {
        // IE 8 and below
        range = document.selection.createRange();
        var selectedText = range.text;
        var replacementText = selectedText.replace(/&lt;\/?random>/, '')        
        range.pasteHTML(replacementText);
    }
}
<div onmouseup="replaceSelection()"><p>This is a &lt;random>sentence&lt;/random> that i am writing<p></div>