在内容可编辑div中的字符串中包含带有段落标记的子字符串

时间:2013-04-14 19:25:31

标签: javascript replace

继承人html - :

<div contenteditable="true">I am a good person</div>

现在我如何使用段落标记包装以index 7 to index 17开头的子字符串,以便结果如下所示 - :<div contenteditable="true">I am a <p>good person</p> </div>

1 个答案:

答案 0 :(得分:1)

Somethinng喜欢:

function wrapSubstring(sourceString, subString, tag) {
    return sourceString.replace(new RegExp("(" + subString + ")", "g"), "<" + tag" + ">$1</" + tag + ">");
}

上面将替换sourceString中的所有subString实例。

<强> 重要 如果subString可以包含任意文本,则需要引用subString。 请参阅:How to escape regular expression in javascript?

一个不那么通用的实现:

// Wrap a subString of sourceString with the given tag
// starting at startIndex(inclusive) and going to endIndex(exclusive)
function wrapSubstring(sourceString, tag, startIndex, endIndex) {
    return sourceString.substring(0, startIndex)
        + "<" + tag + ">"
        + sourceString.substring(startIndex, endIndex)
        + "</" + tag + ">"
        + (endIndex ? sourceString.substring(endIndex) : "");
}

以下是使用jquery的示例调用:

var $element = $('#someId');
$element.html(wrapSubstring($element.html(), 'p', 7, 17);