如果选择在标签内,如何获取格式化文本
How to get formatted text if selection is inside tags
如果我 select(用鼠标突出显示)粗体文本,我想在其周围添加 标记( 也是如此,、 等...)。
当您开始在全粗体句子中使用 select 粗体字词时,就会出现问题。从逻辑上讲,如果我 select 编辑粗体文本 - 我想将粗体文本复制到其他地方。但是如果 selection 不交叉格式化标签,我会丢失格式信息......
这是工作 fiddle 示例:https://jsfiddle.net/xt557ov5/1/
- Select 只需 第一行加粗字并按下按钮。
- 现在select 所有第二行,然后按一个按钮。
如果你想要更神奇的东西 - select 只需单词 LINE,从第一个字母到最后一个字母(四个字母周围没有空格) - 你也会得到没有任何粗体格式的 LINE。
代码段:
$('#extract').on('click', function() {
extract();
});
function extract() {
var str = getSelectionHtml();
str = str.toString().replace(/</g, "<").replace(/>/g, ">");
console.log(str);
$('#result').empty().append(str);
}
function getSelectionHtml() {
var html = "";
if (typeof window.getSelection != "undefined") {
var sel = window.getSelection();
if (sel.rangeCount) {
var container = document.createElement("div");
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
container.appendChild(sel.getRangeAt(i).cloneContents());
}
html = container.innerHTML;
}
} else if (typeof document.selection != "undefined") {
if (document.selection.type == "Text") {
html = document.selection.createRange().htmlText;
}
}
return html;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button type="button" id="extract">Extract</button>
<br>
<br>
<div id="edit">
<br>
<b>Select here just word BOLD and press [Extract].</b>
<br>
<br>
<br>Now select all this <b>LINE</b>, and press [Extract].
</div>
<h4>Result:</h4>
<div id="result">
</div>
也许这会有所帮助:Whosebug: Identify wether the selected text in a web page is bold or not
为了将它应用到您的代码中,我构建了这个:
...
function selectionIsBold() {
var range, isBold = false;
if (window.getSelection) {
var sel = window.getSelection();
if (sel && sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
document.designMode = "on";
sel.removeAllRanges();
sel.addRange(range);
}
}
if (document.queryCommandState) {
isBold = document.queryCommandState("bold");
}
if (document.designMode == "on") {
document.designMode = "off";
}
return isBold;
}
function extract(){
var str = getSelectionHtml();
if(selectionIsBold()){
str= "<b>"+str.toString()+"</b>";
}else{
str = str.toString().replace(/</g, "<").replace(/>/g, ">");
}
$('#result').empty().append(str);
}
...
注意:selectionIsBold returns 当文本被标记为“”时也为真。对于其他文本格式检查(例如 )更改
isBold = document.queryCommandState("bold");
到
isBold = document.queryCommandState("italic");
如果我 select(用鼠标突出显示)粗体文本,我想在其周围添加 标记( 也是如此,、 等...)。 当您开始在全粗体句子中使用 select 粗体字词时,就会出现问题。从逻辑上讲,如果我 select 编辑粗体文本 - 我想将粗体文本复制到其他地方。但是如果 selection 不交叉格式化标签,我会丢失格式信息...... 这是工作 fiddle 示例:https://jsfiddle.net/xt557ov5/1/
- Select 只需 第一行加粗字并按下按钮。
- 现在select 所有第二行,然后按一个按钮。
如果你想要更神奇的东西 - select 只需单词 LINE,从第一个字母到最后一个字母(四个字母周围没有空格) - 你也会得到没有任何粗体格式的 LINE。
代码段:
$('#extract').on('click', function() {
extract();
});
function extract() {
var str = getSelectionHtml();
str = str.toString().replace(/</g, "<").replace(/>/g, ">");
console.log(str);
$('#result').empty().append(str);
}
function getSelectionHtml() {
var html = "";
if (typeof window.getSelection != "undefined") {
var sel = window.getSelection();
if (sel.rangeCount) {
var container = document.createElement("div");
for (var i = 0, len = sel.rangeCount; i < len; ++i) {
container.appendChild(sel.getRangeAt(i).cloneContents());
}
html = container.innerHTML;
}
} else if (typeof document.selection != "undefined") {
if (document.selection.type == "Text") {
html = document.selection.createRange().htmlText;
}
}
return html;
}
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.0.0/jquery.min.js"></script>
<button type="button" id="extract">Extract</button>
<br>
<br>
<div id="edit">
<br>
<b>Select here just word BOLD and press [Extract].</b>
<br>
<br>
<br>Now select all this <b>LINE</b>, and press [Extract].
</div>
<h4>Result:</h4>
<div id="result">
</div>
也许这会有所帮助:Whosebug: Identify wether the selected text in a web page is bold or not
为了将它应用到您的代码中,我构建了这个:
...
function selectionIsBold() {
var range, isBold = false;
if (window.getSelection) {
var sel = window.getSelection();
if (sel && sel.getRangeAt && sel.rangeCount) {
range = sel.getRangeAt(0);
document.designMode = "on";
sel.removeAllRanges();
sel.addRange(range);
}
}
if (document.queryCommandState) {
isBold = document.queryCommandState("bold");
}
if (document.designMode == "on") {
document.designMode = "off";
}
return isBold;
}
function extract(){
var str = getSelectionHtml();
if(selectionIsBold()){
str= "<b>"+str.toString()+"</b>";
}else{
str = str.toString().replace(/</g, "<").replace(/>/g, ">");
}
$('#result').empty().append(str);
}
...
注意:selectionIsBold returns 当文本被标记为“”时也为真。对于其他文本格式检查(例如 )更改
isBold = document.queryCommandState("bold");
到
isBold = document.queryCommandState("italic");