如何使用substring而不是replace

时间:2017-07-17 23:05:57

标签: javascript replace

现在我可以在div中获得字符串位置,如下所示

getRange(){
var selection = window.getSelection();
var range = selection.getRangeAt(0);
var range_clone = range.cloneRange();
range_clone.selectNodeContents(document.getElementById("test"));
range_clone.setEnd(range.startContainer, range.startOffset);
var start = range_clone.toString().length;
range_clone.setEnd(range.endContainer, range.endOffset);
var end = range_clone.toString().length;
return {
  start : start,
  end: end
};
<div id="test"><b>abc</b></div>

如果我选择abc,它将以0开始返回,并以3

结束

但是,我的问题是,如果我使用

$("#test").html().substring(0, 3)

它将返回<b>,但不会返回粗体

如何排除标记并仅返回字符串部分?

我这样做是因为现在abc是粗体,我想用子串解开用户选择。我知道我可以使用string.replace做同样的事情,但string.replace只替换第一次出现。它不允许我替换特定的位置。

我如何使用string.substring?

提前感谢您的帮助

更新

为了明确我的目的,我正在制作一个文本编辑器,允许用户通过选择字符串进行解包。

例如,他们有<b>Please help me, I am stuck</b>

然后他们选择“帮助我”

它应该能够在“帮助我”周围插入</b><b>,这将成为

<b>Please </b> help me<b>, I am stuck </b>

所以它解开了“帮助我”。

1 个答案:

答案 0 :(得分:1)

你以非常笨重的方式进行文本提取。

要获取JavaScript中的所有<div>内容,您只需 .innerHTML

&#13;
&#13;
var test = document.getElementById('test');
console.log(test.innerHTML);
&#13;
<div id="test"><b>abc</b></div>
&#13;
&#13;
&#13;

如果您想要抓取<b>代码之间的内容,可以使用 getElementsByTagName() ,然后使用{{1定位第一个索引}}:

&#13;
&#13;
[0]
&#13;
var test = document.getElementById('test');
var inner = test.getElementsByTagName('b')[0].innerHTML;
console.log(inner);
&#13;
&#13;
&#13;

或者,您可以通过将.children()<div id="test"><b>abc</b></div>相结合,在jQuery中执行此操作。显然,.innerHTML代码是第一个孩子,因此您需要再次使用<b>索引:

&#13;
&#13;
[0]
&#13;
var inner = $("#test").children()[0].innerHTML;
console.log(inner);
&#13;
&#13;
&#13;

删除BOLD FONT-HIGH:

要使用JavaScript从元素中删除<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> <div id="test"><b>abc</b></div>权重,您可以使用 .style 。具体来说,bold将字体设置为默认权重。请注意,您需要定位元素本身,而不是文本(因此您不需要.style.fontWeight = "normal"):

&#13;
&#13;
.innerHTML
&#13;
var inner = $("#test").children()[0];
inner.style.fontWeight = "normal";
console.log(inner);
&#13;
&#13;
&#13;

希望这有帮助! :)