现在我可以在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>
所以它解开了“帮助我”。
答案 0 :(得分:1)
你以非常笨重的方式进行文本提取。
要获取JavaScript中的所有<div>
内容,您只需 .innerHTML :
var test = document.getElementById('test');
console.log(test.innerHTML);
&#13;
<div id="test"><b>abc</b></div>
&#13;
如果您想要抓取<b>
代码之间的内容,可以使用 getElementsByTagName() ,然后使用{{1定位第一个索引}}:
[0]
&#13;
var test = document.getElementById('test');
var inner = test.getElementsByTagName('b')[0].innerHTML;
console.log(inner);
&#13;
或者,您可以通过将.children()与<div id="test"><b>abc</b></div>
相结合,在jQuery中执行此操作。显然,.innerHTML
代码是第一个孩子,因此您需要再次使用<b>
索引:
[0]
&#13;
var inner = $("#test").children()[0].innerHTML;
console.log(inner);
&#13;
要使用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"
):
.innerHTML
&#13;
var inner = $("#test").children()[0];
inner.style.fontWeight = "normal";
console.log(inner);
&#13;
希望这有帮助! :)